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调用