在特定路由前缀配置OWIN静态文件服务器

时间:2014-06-07 20:44:39

标签: asp.net owin fileserver

我正在尝试将我的内容保存在非默认位置(例如bower_components/packages/../tools)。作为实验的一部分,我正在尝试设置一个asp.net mvc 5应用程序,其中命中某个路径允许我浏览undersorejs包目录中的文件。

我有以下nuget包(除了默认值)

Install-Package underscore.js
Install-Package Microsoft.Owin.StaticFiles
Install-Package Microsoft.Owin.Host.SystemWeb

这就是我在OWIN启动类

中所拥有的
 var fileSystem = new PhysicalFileSystem(
                    HttpContext.Current.Server.MapPath("~")+"/../packages/underscore.js.1.6.0"
                  );
 var options = new FileServerOptions {EnableDirectoryBrowsing = true, FileSystem = fileSystem};

 app.MapWhen(ctx => 
      ctx.Request.Uri.AbsolutePath.StartsWith("/__underscore"), 
      ab => ab.UseFileServer(options)
 );

根据/__underscore use the simple static file server,我的理解和之前的实验非常简单明了。但是,当我转到/__underscore时,我收到404错误。

但是,放置断点我可以看到UseFileServer lambda在启动时执行一次,然后再也没有,而且每次请求都会调用谓词lambda(并返回正确的值)。

我错过了什么?

1 个答案:

答案 0 :(得分:14)

您还需要指定RequestPath

var options = new FileServerOptions {
                      EnableDirectoryBrowsing = true,
                      FileSystem = fileSystem,
                      RequestPath = PathString.FromUriComponent("/__underscore")
                      };

根据您的评论:

如果您无法下载文件,请尝试在OwinHttpHandler中明确注册Web.Config

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

或者,您可以将runAllManagedModulesForAllRequests设置为“true”:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="FormsAuthenticationModule" />
    </modules>
</system.webServer>