在使用基于属性的路由的ASP.NET MVC5中,我想处理带有文件扩展名的URL,例如
~/javascript/security.js
这是一个示例控制器操作方法:
[Route("javascript/security.js")]
public ActionResult AngularSecurityModule(string clientId)
{
return View(new
{
ClientId = clientId
});
}
然而,这给了我一个HTTP 404 - Not Found。
我更喜欢不使用runAllManagedModulesForAllRequests(例如
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
)因为这会损害网络应用程序中其他静态文件的性能。
答案 0 :(得分:2)
原来答案是我只需要为该URL注册正确的处理程序,即添加
<add name="JavascriptSecurityJs" path="javascript/security.js" verb="GET" type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
到我的system.webServer/handlers
就行了。为了完整起见,system.webServer
中的整个web.config
块:
<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静态文件处理仍适用于所有静态文件。