如何通过文件扩展名获取多媒体类型的TCM URI

时间:2012-09-26 07:05:01

标签: tridion tridion-2011

我想通过将文件扩展名作为参数传递给方法来获取多媒体类型的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);

上面的代码我得到“序列中没有匹配元素”的例外,任何人都可以建议如何执行此操作。

1 个答案:

答案 0 :(得分:9)

如果与您的Linq表达式不匹配,则抛出

Sequence contains no matching element。我看到的是你正在尝试匹配扩展名列表:

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

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

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

还要考虑使用SingleOrDefault方法而不是Single。它不会抛出异常,但如果没有匹配则返回null。您可以稍后检查null

的多媒体类型