有没有一种方法可以实现调用URL http://mywebsite/myarea/mycontroller/myaction.xml
这基本上是“假的”请求一个文件,但结果将是一个为动态创建的文件提供服务的操作操作?
我试过这个:
context.MapRoute(
"Xml_filename",
"Xml/{controller}/{action}.xml"
);
但是,只要URL中有文件扩展名,路由就会失败,行为就像我直接请求文件一样。
我怀疑这可能是因为使用了无扩展名的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" />
感谢您的任何建议。
雅各布
发布于 2014-03-04 08:04:06
您需要将对XML文件的请求映射到web.config中的TransferRequestHandler
。否则,IIS将处理该请求。
Jon Galloway解释了如何做到这一点here。
总之,将此元素添加到web.config中的location/system.webServer/handlers:
<add name="XmlFileHandler" path="*.xml" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
发布于 2015-11-15 16:57:34
问题在于,IIS会将.xml文件作为静态文件处理,并且在默认情况下不会通过MVC应用程序路由该文件。IIS处理该请求,并且MVC代码永远不会更改路由到此文件的路径。有几种方法可以解决这个问题。
我已经找到了处理此问题的最简单方法,即使用IIS重写模块将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>
确保已安装IIS重写模块(独立于平台安装程序进行安装)。如果您已经在使用重写处理程序,这是最有效的解决方案。
正如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>
然后,您可以使用属性路由来处理.xml文件Urls。例如:
[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
发布于 2014-03-04 07:44:19
如果您将xml文件放入网站内的某个文件夹中。试试下面这样的代码:C# - How to make a HTTP call
https://stackoverflow.com/questions/22159419
复制相似问题