如何绕过IIS中的Accept标头验证?

时间:2015-11-18 22:22:21

标签: asp.net iis web-config nancy http-status-code-406

我在ASP.Net上托管了一个Nancy网站,其中包含许多自定义路由。这些路由包括看起来像文件路径的映射(例如/path/to/xml_file.xml),但是解析为应该在浏览器中显示的HTML文件。对于大多数文件,这可以正常工作。但是,对于XML文件(以及可能的其他mime类型),我从IIS 8 Express中明确指出

我收到406.0 HTTP错误
  

HTTP错误406.0 - 不可接受

     

无法显示资源,因为浏览器未接受文件扩展名。

     

请求被拒绝,因为它包含一个MIME类型的Accept标头,该标头不支持所请求的文件扩展名。

     

验证所请求的文件扩展名的MIME设置,以确保此MIME类型可以接受。

406 Error Page Screenshot

是否有任何web.config设置或其他技术绕过此验证,以便我不会在不重写路径逻辑的情况下得到此错误?我的Google搜索失败了。例如,我发现this IIS forum post链接了SO Answer,其中讨论了

  

将所有请求映射到ASP.NET并使用ASP.NET的StaticFileHandler为它们提供服务

然而,这篇文章没有解释如何做到这一点;它似乎也不适用。

修改(上面添加了错误页面图片)

作为另一个花絮,南希路线返回形式

的显式视图
return View["view_name", myModel];

因此,应绕过内容协商。

2 个答案:

答案 0 :(得分:3)

虽然本身不​​是修复或答案,但我目前的工作(对于任何可能感兴趣的人)都是调整路线以使用尾部斜杠。举个例子:

"/path/to/xml_file.xml"   //  Still returns a 406.0 error
"/path/to/xml_file.xml/"  //  Works properly (notice the trailing slash)

答案 1 :(得分:1)

这是指向Rackspace知识中心的链接,其中显示了如何更改web.config文件中静态内容的MIME映射。

https://www.iis.net/configreference/system.webserver/staticcontent/mimemap

MS的这个也是更深入的。

https://www.iis.net/configreference/system.webserver/staticcontent/mimemap

它们都具有web.config文件中的这一节。

<configuration>
  <system.webServer>
    <staticContent>
      <remove fileExtension=".extension" />
      <mimeMap fileExtension=".extension" mimeType="application/example" />
    </staticContent>
  </system.webServer>
</configuration>

如果这是如何实际修复406.0问题......