【问题标题】:Serving static files in ASP.NET 5 MVC 6在 ASP.NET 5 MVC 6 中提供静态文件
【发布时间】:2015-09-09 18:08:57
【问题描述】:

我的 wwwroot 静态文件没有被解析。

我知道要提供静态文件,我需要将它们放在 wwwroot 中:

favicon.ico 解析得很好,但 schema/v1-0.json 没有。我得到了一般信息:

您要查找的资源已被删除,有它的名字 已更改,或暂时不可用。

我在Startup 中连接了以下内容:

app.UseMiddleware<StaticFileMiddleware>(new StaticFileOptions());
app.UseStaticFiles();

我正在使用 DNX beta6。以上需要 beta5 包。我在网上找不到任何关于在 beta6 中提供静态文件的信息。我不确定这是否是问题的原因。

编辑:

根据 Sirwan 的回答,我添加了以下内容,但是 json 文件仍然不可用:

var options = new StaticFileOptions
{
    ContentTypeProvider =  new JsonContentTypeProvider(),
    ServeUnknownFileTypes = true,
    DefaultContentType = "application/json"
};

app.UseStaticFiles(options);

JsonContentTypeProvider 类:

public class JsonContentTypeProvider : FileExtensionContentTypeProvider
{
    public JsonContentTypeProvider()
    {
        Mappings.Add(".json", "application/json");
    }
}

浏览服务器时我什至可以看到文件:

【问题讨论】:

  • 我的记忆在这里有点模糊,但我相信 IIS 或 ASP.NET MVC 按文件扩展名过滤允许的静态文件。例如,如果您在该位置添加一个 .png 文件,您可能可以正常访问它。您需要找到 web.config 或 ASP.NET 设置以指定允许的静态文件扩展名并将 .json 添加到其中

标签: azure visual-studio-2015 azure-web-app-service asp.net-core asp.net-core-mvc


【解决方案1】:

试试这个:

app.UseStaticFiles(new StaticFileOptions
{
    ServeUnknownFileTypes = true,
    DefaultContentType = "image/x-icon"
});

如果您有多种 ASP.NET 未知的文件类型,您可以使用 FileExtensionContentTypeProvider 类:

var provider = new FileExtensionContentTypeProvider();
provider.Mappings.Add(".json", "application/json");
provider.Mappings.Add(".ico", "image/x-icon");
// Serve static files.
app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = provider });

【讨论】:

  • 这不是为所有静态文件提供服务吗?如何只允许 json?
  • 如果您有多种 ASP.NET 未知的文件类型,您可以使用 FileExtensionContentTypeProvider 类。
  • @davenewza 我已经更新了我的答案。希望对你有帮助。
  • 还是同样的问题。请查看我的编辑 - 谢谢!
  • 添加内容类型提供程序为我解决了这个问题。我不需要将 ServeUnknownFileTypes 设置为 true(我使用的是 webapi 2.2)。谢谢
【解决方案2】:

如果您使用的是 IIS,如果您没有包罗万象的托管处理程序,请确保您已添加正确的 mime 类型映射。即使您的网站运行不需要需要 web.config,IIS 仍会为您的网站使用它。

如果我错了,请有人纠正我,但我相信,如果您没有将 IIS 配置为使用托管处理程序来提供静态文件,它仍将默认为 StaticFileModule 并且调用 app.UseStaticFiles 实际上并没有做任何事情.但是,如果您使用 dnx 运行它,则会使用 app.UseStaticFiles

顺便说一句,如果您还没有升级到 beta7,您可能也应该升级到 beta7。

【讨论】:

  • 我认为 IIS 正在阻碍。当我在 IIS Express 中托管时请求任何 css 文件时,我会“免费”获得 gzip 压缩。如果我使用 WebListener 托管它,我不会得到这种行为。这意味着请求甚至没有到达我们的任何中间件。如果我错了,请纠正我
  • 我不认为它“妨碍”。如果您希望 ASP.NET 5 处理静态文件而不是 IIS,则只需正确配置它。