我想通过将文件扩展名作为参数传递给方法来获取多媒体类型的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);
上面的代码我得到“序列中没有匹配元素”的例外,任何人都可以建议如何执行此操作。
答案 0 :(得分:9)
Sequence contains no matching element
。我看到的是你正在尝试匹配扩展名列表:
mt => ((MultimediaTypeData)mt).FileExtensions == lFileExtensions
这意味着多媒体类型的文件扩展名应与您的lFileExtensions
完全匹配,它甚至应该具有相同的顺序。
相反,请尝试仅搜索您需要的1个文件扩展名:
mt => ((MultimediaTypeData)mt).FileExtensions.Contains(myFileExtension)
还要考虑使用SingleOrDefault
方法而不是Single
。它不会抛出异常,但如果没有匹配则返回null
。您可以稍后检查null