3

我想通过将文件扩展名作为参数传递给方法来获取多媒体类型的 TCM URI。以下是我正在使用的代码,但出现了一些异常:-

private static string GetMultimediaTypeTCMURI(FileExtensionsList lFileExtensions)
{
    string lTCMURI = "";
    try
    {
        SessionAwareCoreService2010Client client 
                                          = new SessionAwareCoreService2010Client();
        client.ClientCredentials.Windows.ClientCredential.UserName = "myUserName";
        client.ClientCredentials.Windows.ClientCredential.Password = "myPassword";
        client.Open();
        FileExtensionsList list = new FileExtensionsList();
        var mmType = client.GetSystemWideList(new MultimediaTypesFilterData())
              .Single(mt => ((MultimediaTypeData)mt).FileExtensions == lFileExtensions);
        lTCMURI = mmType.Id;
    }
    catch (Exception e)
    {
        throw new Exception("Please check either Mimetype" 
              + lFileExtensions + "is wrong or Mimetype does not exist in SDL Tridion.");
    }
    return lTCMURI;

}

调用上述方法:-

FileExtensionsList list = new FileExtensionsList();
list.Add("js");

GetMultimediaTypeTCMURI(list);

我在上面的代码中收到“序列不包含匹配元素”异常,请任何人建议如何执行此操作。

4

1 回答 1

9

Sequence contains no matching element如果与您的 Linq 表达式不匹配,则抛出。我看到的是您正在尝试匹配扩展名列表:

mt => ((MultimediaTypeData)mt).FileExtensions == lFileExtensions

这意味着多媒体类型的文件扩展名应该与您的完全匹配lFileExtensions,甚至应该具有相同的顺序。相反,请尝试仅搜索您需要的 1 个文件扩展名:

mt => ((MultimediaTypeData)mt).FileExtensions.Contains(myFileExtension)

还可以考虑使用SingleOrDefaultmethod 而不是Single. 它不会抛出异常,但null如果没有匹配则返回。您可以稍后检查多媒体类型null

于 2012-09-26T07:16:39.607 回答