Jak*_*sky 27 c# url file-extension asp.net-mvc-routing asp.net-mvc-3
有没有办法实现调用URL http://mywebsite/myarea/mycontroller/myaction.xml
这基本上"假"请求文件,但结果将是一个动作操作,将服务于动态创建的文件?
我试过这个:
context.MapRoute(
"Xml_filename",
"Xml/{controller}/{action}.xml"
);
Run Code Online (Sandbox Code Playgroud)
但是只要URL中有filextension,路由就会失败并且表现就像我直接请求文件一样.
我怀疑这可能是因为使用扩展名更少的url处理程序.
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
Run Code Online (Sandbox Code Playgroud)
谢谢你的任何建议.
的Jakub
Ben*_*ter 29
您需要TransferRequestHandler将对XML文件的请求映射到web.config中.否则IIS将处理该请求.
总之,您将此元素添加到web.config中的location/system.webServer/handlers:
<add name="XmlFileHandler" path="*.xml" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
Run Code Online (Sandbox Code Playgroud)
问题是IIS将.xml文件作为静态文件处理,并且默认情况下不会通过MVC应用程序路由XML文件.IIS处理请求,您的MVC代码永远不会更改路由到此文件.有几种方法可以解决这个问题.
我找到了最简单的方法来处理这个问题,方法是使用IIS Rewrite模块将URL从静态文件URL重写为MVC路由:
<system.webServer>
<rewrite>
<rules>
<rule name="Live Writer Manifest">
<match url="*.xml"/>
<action type="Rewrite" url="route/xmlfilehandler"/>
</rule>
</rules>
</rewrite>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
确保安装了IIS重写模块(从Platform Installer单独安装).如果您已经在使用Rewrite处理程序,那么这是最有效的解决方案.
正如Ben Foster和Jon Galloway的帖子所指出的,您还可以根据TransferRequestHandler您想要路由的特定路径进行映射.为了紧凑,这里是您需要添加到web.config的内容:
<system.webServer>
<handlers>
<add name="Windows Live Writer Xml File Handler"
path="wlwmanfest.xml"
verb="GET" type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0"
/>
</handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用属性路由来处理.xml文件URL.例如:
[Route("blog/wlwmanifest.xml")]
public ActionResult LiveWriterManifest() {... }
Run Code Online (Sandbox Code Playgroud)
此博客文章中的更多信息:http: //weblog.west-wind.com/posts/2015/Nov/13/Serving-URLs-with-File-Extensions-in-an-ASPNET-MVC-Application
| 归档时间: |
|
| 查看次数: |
15624 次 |
| 最近记录: |