ASP.NET MVC – 路由 – 具有文件扩展名的操作
有没有办法实现调用URL http://mywebsite/myarea/mycontroller/myaction.xml
这基本上“假”请求文件但结果将是一个动作操作,将服务于动态创建的文件?
我试过这个:
context.MapRoute( "Xml_filename", "Xml/{controller}/{action}.xml" );
但是,只要URL中存在filextension,路由就会失败并且表现就像我直接请求文件一样。
我怀疑这可能是因为使用扩展名更少的url处理程序。
谢谢你的任何建议。
的Jakub
您需要将XML文件的请求映射到web.config中的TransferRequestHandler
。 否则IIS将处理该请求。
Jon Galloway 在这里解释了如何做到这一点 。
总之,您将此元素添加到web.config中的location / system.webServer / handlers:
问题是IIS将.xml文件作为静态文件处理,并且默认情况下不会通过MVC应用程序路由XML文件。 IIS处理请求,您的MVC代码永远不会更改路由到此文件。 有几种方法可以解决这个问题。
通过使用IIS Rewrite模块将URL从静态文件URL重写为MVC路由,我找到了最简单的方法来处理这个问题:
确保安装了IIS重写模块(从Platform Installer单独安装)。 如果您已经在使用Rewrite处理程序,那么这是最有效的解决方案。
正如Ben Foster和Jon Galloway的post所指出的,您还可以在您要路由的特定路径上映射TransferRequestHandler
。 为了实现紧凑性,您需要添加到web.config中:
然后,您可以使用属性路由来处理.xml文件URL。 例如:
[Route("blog/wlwmanifest.xml")] public ActionResult LiveWriterManifest() {... }
此博客文章中的更多信息: http : //weblog.west-wind.com/posts/2015/Nov/13/Serving-URLs-with-File-Extensions-in-an-ASPNET-MVC-Application
如果您将xml文件放在网站内的其中一个文件夹中。 尝试这样的事情: C# – 如何进行HTTP调用