在ASP.NET Core中使用MimeMapping

94

我正在尝试将我的旧MVC5项目迁移到ASP.NET Core。

旧代码如下:

public string ContentType
{
    get
    {
        if (!string.IsNullOrEmpty(FileName))
            return MimeMapping.GetMimeMapping(FileName);
        return null;
    }
}

错误是

当前上下文中不存在名称为'MimeMapping'的内容

输入图像描述这里

3个回答

151
以下代码应该可以正常工作:
string contentType;
new FileExtensionContentTypeProvider().TryGetContentType(FileName, out contentType);
return contentType ?? "application/octet-stream";

1
@NickMuller,'System.Net.Mime' 在 .NET Core 的世界中得到支持了吗? - Brennen Sprimont
1
@BrennenSprimont:不是的,我曾在一个针对.NET 4.x的项目上工作,可能有点混淆了。我已删除了该评论,因为无法再进行编辑。 - Nick Muller
15
注意:在 ASPNETCORE 2.1 中,这段代码需要添加 Nuget 包:'Microsoft.AspNetCore.StaticFiles',并且要添加 'using Microsoft.AspNetCore.StaticFiles;' 声明。 - Sid James
注意:FileExtensionContentTypeProvider仅为一部分mimetype提供mimetype映射,与MimeMapping.GetMimeMapping()相比。例如,当前的visio类型如.vsdx、.vsdm等无法使用它进行映射! - MDummy

32
有一个 NuGet 包 MimeTypes,它可以作为 FileExtensionContentTypeProvider 的替代品,用于 .Net Core 项目。据我所知,目前没有其他可以与 .Net Core 兼容的 mime-type 解析器包。
使用方法很简单:
string fileName = "trial.jpg";
string mime = MimeKit.MimeTypes.GetMimeType(fileName);

简单即是好!首先尝试了Mark的答案,但需要引用另一个dll。这种方法只有一个目的的c#文件,它作为内容文件添加,并可以像下面所示一样被引用。 - Avner
5
使用新版本 https://www.nuget.org/packages/MimeTypes ,只需使用 MimeTypes.GetMimeType(filename) 即可获取文件的 MIME 类型。 - Tejasvi Hegde
现在Microsoft.AspNetCore.StaticFiles已经被弃用,这是一个更好的解决方案。 - HackSlash
现在Microsoft.AspNetCore.StaticFiles已经被弃用,这是一个更好的解决方案。 - undefined

7

在寻找其他答案之后,没有其他更好的方法。唯一更好的方法是根据静态列表自动生成C#代码。 - Maxime Rouiller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接