C# 有效地将扩展字符串映射到图标URL

C# 有效地将扩展字符串映射到图标URL,c#,asp.net,sharepoint,search,file-type,C#,Asp.net,Sharepoint,Search,File Type,我有一个ASP.NET web应用程序托管在内置搜索功能的CMS(sharepoint 2013)上 使用搜索运行文件查询时,文件类型的唯一指示是扩展名字符串,其格式不带句点“PNG”或“JPG” 我没有得到一个文件,我只是得到描述该文件的元数据。要明确的是,我没有得到任何MIME类型或文件对象,我只得到一个扩展字符串 我在网站上四处寻找这样的问题,但我没有看到 似乎有某种方法可以返回字符串,并在其签名中接受字符串输入,然后搜索某种类型的对象集合,如下所示: 最终结果: static class

我有一个ASP.NET web应用程序托管在内置搜索功能的CMS(sharepoint 2013)上

使用搜索运行文件查询时,文件类型的唯一指示是扩展名字符串,其格式不带句点
“PNG”或“JPG”

我没有得到一个文件,我只是得到描述该文件的元数据。要明确的是,我没有得到任何MIME类型或文件对象,我只得到一个扩展字符串

我在网站上四处寻找这样的问题,但我没有看到

似乎有某种方法可以返回字符串,并在其签名中接受字符串输入,然后搜索某种类型的对象集合,如下所示:

最终结果:

static class FileIcons
{
    static public string PDF = string.Format("{0}", SPContext.Current.Site.ServerRelativeUrl + "_layouts/15/monkeysphere/images/icons/pdf.png");
    static public string Word = string.Format("{0}", SPContext.Current.Site.ServerRelativeUrl + "_layouts/15/monkeysphere/images/icons/word.png");
    static public string Generic = string.Format("{0}", SPContext.Current.Site.ServerRelativeUrl + "_layouts/15/monkeysphere/images/icons/file.png");

    static private Dictionary<String, String> IconUrls = new Dictionary<String,String>() 
                        {
                            {"JPG", Picture},{"JPEG", Picture},{"GIF", Picture},{"PNG", Picture},
                            {"PDF", PDF},{"DOC", Word},{"DOCX", Word},{"XLS", Excel},{"XLSX", Excel},{"PPT", PowerPoint},{"PPTX", PowerPoint}
                        };

    static public string GetIconUrlFromExtension(string extension)
    {
        var formattedExtension = extension.Trim().Replace(".","").ToUpper();
        if (string.IsNullOrEmpty(extension) || !IconUrls.ContainsKey(formattedExtension))
            return Generic;
        return IconUrls[formattedExtension];
    }
}
静态类文件图标
{
静态公共字符串PDF=string.Format(“{0}”,SPContext.Current.Site.ServerRelativeUrl+”_layouts/15/monkeysphere/images/icons/PDF.png”);
静态公共字符串Word=string.Format(“{0}”,SPContext.Current.Site.ServerRelativeUrl+”_layouts/15/monkeysphere/images/icons/Word.png”);
静态公共字符串Generic=string.Format(“{0}”,SPContext.Current.Site.ServerRelativeUrl+”_layouts/15/monkeysphere/images/icons/file.png”);
静态专用字典IconUrls=新字典()
{
{“JPG”,Picture},{“JPEG”,Picture},{“GIF”,Picture},{“PNG”,Picture},
{“PDF”,PDF},{“DOC”,Word},{“DOCX”,Word},{“XLS”,Excel},{“XLSX”,Excel},{“PPT”,PowerPoint},{“PPTX”,PowerPoint}
};
静态公共字符串GetIconUrlFromExtension(字符串扩展名)
{
var formattedExtension=extension.Trim().Replace(“.”,“”)。ToUpper();
if(string.IsNullOrEmpty(扩展名)| |!IconUrls.ContainsKey(格式化扩展名))
返回泛型;
返回IConURL[格式化扩展];
}
}

我认为
字典
会是一个更好的选择。大概是这样的:

public static class IconUrls {
    static Dictionary<string, string> _extensions;
    static string DefaultUrl = "~/siteroot/images/icons/genericicon.png";

    static IconUrls {
        extensions = new Dictionary<string, string>() {
            { "JPG", "~/siteroot/images/icons/jpegicon.png" }, 
            { "JPEG", "~/siteroot/images/icons/jpegicon.png" }
        }
    }

    public static Dictionary<string, string> Extensions {
        get {
            return _extensions;
        }
    }

    public static string GetIconUrl(string extension) {
    {
        if(string.IsNullOrEmpty(extension) || !_dictionary.ContainsKey(extension.Trim().ToUpper()))
            return DefaultUrl;
        return _extensions[extension.Trim().ToUpper()];
    }
}
公共静态类IConURL{
静态字典扩展;
静态字符串DefaultUrl=“~/siteroot/images/icons/genericcon.png”;
静态IconUrls{
extensions=newdictionary(){
{“JPG”,“~/siteroot/images/icons/jpegicon.png”},
{“JPEG”、“~/siteroot/images/icons/jpegicon.png”}
}
}
公共静态字典扩展{
得到{
返回扩展;
}
}
公共静态字符串GetIconUrl(字符串扩展名){
{
if(string.IsNullOrEmpty(扩展名)| |!_dictionary.ContainsKey(扩展名.Trim().ToUpper())
返回DefaultUrl;
返回扩展名[extension.Trim().ToUpper()];
}
}

您也可以从配置文件加载映射,这样就不会硬编码它们。

我认为
字典是一个更好的选择。类似这样:

public static class IconUrls {
    static Dictionary<string, string> _extensions;
    static string DefaultUrl = "~/siteroot/images/icons/genericicon.png";

    static IconUrls {
        extensions = new Dictionary<string, string>() {
            { "JPG", "~/siteroot/images/icons/jpegicon.png" }, 
            { "JPEG", "~/siteroot/images/icons/jpegicon.png" }
        }
    }

    public static Dictionary<string, string> Extensions {
        get {
            return _extensions;
        }
    }

    public static string GetIconUrl(string extension) {
    {
        if(string.IsNullOrEmpty(extension) || !_dictionary.ContainsKey(extension.Trim().ToUpper()))
            return DefaultUrl;
        return _extensions[extension.Trim().ToUpper()];
    }
}
公共静态类IConURL{
静态字典扩展;
静态字符串DefaultUrl=“~/siteroot/images/icons/genericcon.png”;
静态IconUrls{
extensions=newdictionary(){
{“JPG”,“~/siteroot/images/icons/jpegicon.png”},
{“JPEG”、“~/siteroot/images/icons/jpegicon.png”}
}
}
公共静态字典扩展{
得到{
返回扩展;
}
}
公共静态字符串GetIconUrl(字符串扩展名){
{
if(string.IsNullOrEmpty(扩展名)| |!_dictionary.ContainsKey(扩展名.Trim().ToUpper())
返回DefaultUrl;
返回扩展名[extension.Trim().ToUpper()];
}
}

您也可以从配置文件加载映射,以免对其进行硬编码。

如何处理未知扩展名或拼写错误的扩展名?检查null并插入默认值?我会检查
字典是否包含该值,如果不包含,则返回默认值。编辑:请参阅我更新的示例。我很高兴d将.Contains替换为.ContainsKeyYou是对的。我从头顶上写下了这一点,没有对它进行测试。谢谢。您将如何处理未知的扩展名或拼写错误的扩展名?检查null并插入默认值?我将检查
字典
是否包含该值,如果没有,则返回默认值。编辑:请参阅my更新了示例。我将.Contains替换为.ContainsKeyYou是对的。我从头顶上写下了这个,没有测试它。谢谢。