Owin UseStaticFiles不尊重RequestPath

时间:2014-03-13 18:22:07

标签: owin

**编辑:注意:这似乎是在Owin StaticFiles中间件的更高版本中修复的,所以如果你有这个探测器,只需升级**

我的OWIN配置包含: -

   string root = AppDomain.CurrentDomain.BaseDirectory;
   var staticFilesOptions = new StaticFileOptions();
   staticFilesOptions.RequestPath = new PathString("/foo");
   staticFilesOptions.FileSystem = new PhysicalFileSystem(Path.Combine(root, "web"));
   app.UseStaticFiles(staticFilesOptions);

当我点击/foo/app/app.js时出现404错误,当我点击/web/app/app.js时会返回该文件。

RequestPath如何与PhysicalFileSystem一起使用?

3 个答案:

答案 0 :(得分:8)

我测试了这段代码片段,它适用于我this sample project

app.UseFileServer(new FileServerOptions()
{
    RequestPath = new PathString("/foo"),
    FileSystem = new PhysicalFileSystem(@".\web"),
});

确保在web.config中有此内容:

<system.webServer>
    ...
    <modules runAllManagedModulesForAllRequests="true"></modules>
    ...
</system.webServer>

答案 1 :(得分:0)

RequestPath为请求中使用的静态资源定义虚拟路径,将其视为静态文件的路径。

使用PhysicalFileSystem定义静态文件查找的路径。

因此,如果对RequestPath中定义的内容有请求,则路径部分将转换为硬盘上的目录。

在您的情况下,您应该收到web/app.js的状态代码404(因为这是您的目录而不是您的路线)和foo/app.js的200。

答案 2 :(得分:0)

我遇到了同样的问题。根据@Rafael here的答案。将以下配置添加到 Web.config ,然后它解决了我的问题:

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

希望这有助于其他人!