我在我的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。
答案 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.Owin
:https://www.nuget.org/packages/Microsoft.Owin/
我希望这有助于其他人。
由于
史蒂夫