【问题标题】:Using MimeMapping in ASP.NET Core在 ASP.NET Core 中使用 MimeMapping
【发布时间】:2016-03-11 22:09:30
【问题描述】:

我正在尝试将我的旧 mvc5 项目移动到 asp net core。 旧代码是:

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

错误是

当前上下文中不存在名称“MimeMapping”

【问题讨论】:

    标签: c# asp.net-core-mvc mime-types system.web


    【解决方案1】:

    以下代码应该可以工作:

    string contentType;
    new FileExtensionContentTypeProvider().TryGetContentType(FileName, out contentType);
    return contentType ?? "application/octet-stream";
    

    【讨论】:

    • @NickMuller 在 netcore 世界中是否支持“System.Net.Mime”?
    • @BrennenSprimont:不,不是。在一个针对 .NET 4.x 的项目中工作,我想我很困惑。我已经删除了评论,因为我无法再编辑它了。
    • 注意:在 ASPNETCORE 2.1 中,此代码需要添加 Nuget 包:“Microsoft.AspNetCore.StaticFiles”和“使用 Microsoft.AspNetCore.StaticFiles;”声明。
    • 注意:与 MimeMapping.GetMimeMapping() 相比,FileExtensionContentTypeProvider 仅为部分 mimetype 提供 mimetype 映射。例如。当前的 visio 类型(如 .vsdx、.vsdm、...)无法与之映射!
    【解决方案2】:

    有一个 NuGet 包 MimeTypes 可与 .Net Core 项目一起使用,作为 FileExtensionContentTypeProvider 的替代方案。我不知道任何其他适用于 .Net Core 的 mime 类型解析器包(至少到目前为止)。

    用法很简单:

    string fileName = "trial.jpg";
    string mime = MimeKit.MimeTypes.GetMimeType(fileName);
    

    【讨论】:

    • 简单=好!首先尝试了马克的答案,但您需要引用另一个 dll。这种方法只有一个单一用途的 c# 文件,该文件作为内容文件添加并且可参考,如图所示。
    • 有了新版本 nuget.org/packages/MimeTypes ,它只是 MimeTypes.GetMimeType(filename)
    【解决方案3】:

    System.Web 没有迁移到 .NetCore,因为它过于依赖特定于平台的 API。您可以查看 Microsoft 参考源:

    https://github.com/Microsoft/referencesource/blob/master/System.Web/MimeMapping.cs

    代码受 MIT 许可的约束。

    【讨论】:

    • 在寻找替代答案之后,没有。唯一更好的方法是根据静态列表自动生成 C# 代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    相关资源
    最近更新 更多