Microsoft.Owin.StaticFiles在控制台主机中工作,但我在IIS中获得了404文件请求

时间:2014-08-01 02:17:43

标签: iis owin static-files katana

我在我的Owin管道中设置了Microsoft.Owin.FileServer(v2.1.0),并且使用EnableDirectoryBrowsing = true设置FileServerOptions非常适合在我的控制台主机和iisexpress中显示目录内容。

当我尝试查看特定文件时(因此,StaticFiles部分)我在iisexpress中遇到问题。在控制台主机中仍然很好用,但在iisexpress中我得到了404:

HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

Most likely causes:
- The directory or file specified does not exist on the Web server.
- The URL contains a typographical error.
- A custom filter or module, such as URLScan, restricts access to the file.

我确实在网络主机中引用了最新的Microsoft.Owin.Host.SystemWeb。

3 个答案:

答案 0 :(得分:19)

添加<modules runAllManagedModulesForAllRequests="true">对我无效(VS2013,IIS Express)。

强制所有请求使用Owin管道:

(在web.config中)

<configuration>
  <system.webServer>
    <handlers>
      <add name="Owin" verb="" path="*" type="Microsoft.Owin.Host.SystemWeb.OwinHttpHandler, Microsoft.Owin.Host.SystemWeb"/>
    </handlers>
  </system.webServer>
</configuration>

答案 1 :(得分:1)

我必须添加以下设置:

<modules runAllManagedModulesForAllRequests="true">

获取Microsoft.Owin.Host.SystemWeb自动注册的模块,以运行IIS假设的* .txt,* .js等路由,这些模块是通过Owin管道运行的静态文件。

此设置确实对实际静态文件有性能影响,但这对我有用。

答案 2 :(得分:0)

我在过去几个小时内一直在努力解决这个问题,添加下面的处理程序确实有效,但我不相信这是正确的方法,它导致public void Configuration(IAppBuilder appBuilder)被调用两次

<add name="Owin" verb="" path="*" type="Microsoft.Owin.Host.SystemWeb.OwinHttpHandler, Microsoft.Owin.Host.SystemWeb"/>

我做了一些阅读,发现https://docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipeline 然后引导我使用UseStageMarked()

所以,现在我打电话给UseStaticFiles()后面跟着一个叫UseStageMarker()的电话:

appBuilder.UseStaticFiles();
//allows owin middlwares to be executed earlier on in the pipeline.
appBuilder.UseStageMarker(PipelineStage.Authenticate);

这里有一个非常好的读物:

您可以在UseStageMarker包中找到Microsoft.Owinhttps://www.nuget.org/packages/Microsoft.Owin/

我希望这有助于其他人。

由于

史蒂夫