【问题标题】:ASP.NET MVC path with file extension带有文件扩展名的 ASP.NET MVC 路径
【发布时间】:2014-04-01 04:59:06
【问题描述】:

在使用基于属性的路由的 ASP.NET MVC5 中,我想处理带有文件扩展名的 URL,例如

~/javascript/security.js

这是一个示例控制器操作方法:

    [Route("javascript/security.js")]
    public ActionResult AngularSecurityModule(string clientId)
    {
        return View(new
                    {
                        ClientId = clientId
                    });
    }

但是,这给了我一个 HTTP 404 - 未找到。

我宁愿不使用 runAllManagedModulesForAllRequests(例如

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

) 因为这会损害 Web 应用程序中其他静态文件的性能。

【问题讨论】:

  • 你怎么知道它会损害那些静态文件的性能?您是否尝试过两种方式,对每种方式进行了分析,并确定运行所有托管模块太慢(我真的怀疑)?如果你还没有,我不会担心。有很多流量高的网站都启用了该设置。
  • 我最近没有测试过。这是一个公平的观点,但也非常依赖于运行什么 OWIN、MVC、Web API 过滤器,以及什么路由匹配。知道高流量站点使用它并不是那么相关 - 高流量站点可能还使用单独的服务器和 CDN 来存储静态文件。您能否提供有关该声明的更多信息?如果有人感兴趣,这里有一个迹象表明 runAllManagedModulesForAllRequests 可能并不理想:hanselman.com/blog/…
  • 谢谢克雷格 - 我没看到那个,看了一圈。分辨率是一样的,所以看起来肯定是相似的。 Diff 是属性路由,我正在寻找文件扩展名。有什么建议可以确定这是否确实是一个骗局?

标签: asp.net-mvc asp.net-mvc-5 attributerouting


【解决方案1】:

原来答案是我只需要为该 URL 注册正确的处理程序,即添加

<add name="JavascriptSecurityJs" path="javascript/security.js" verb="GET" type="System.Web.Handlers.TransferRequestHandler"    
      preCondition="integratedMode,runtimeVersionv4.0" />

我的system.webServer/handlers 成功了。为了完整起见,这是web.config 中的整个system.webServer 块:

<system.webServer>
  <handlers>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <remove name="OPTIONSVerbHandler" />
    <remove name="TRACEVerbHandler" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    <add name="JavascriptSecurityJs" path="javascript/security.js" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>

这样做的好处是 IIS 静态文件处理仍然适用于所有静态文件。

【讨论】:

  • TransferRequestHandler 和 UrlRoutingHandler 有什么区别?两者似乎都可以正常工作。
猜你喜欢
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 2013-04-26
  • 2013-02-27
  • 1970-01-01
  • 2019-01-14
  • 2011-03-10
相关资源
最近更新 更多