有没有办法实现调用URL http://mywebsite/myarea/mycontroller/myaction.xml
这基本上是“假”的请求文件,但结果将是一个动作的操作,将成为动态创建的文件?
我尝试这样做:
context.MapRoute(
"Xml_filename",
"Xml/{controller}/{action}.xml"
);
但每当有filextension在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" />
谢谢你的任何建议。
的Jakub
您需要为您的XML文件的请求映射到TransferRequestHandler
在web.config中。 否则,IIS处理请求。
乔恩·加洛韦解释如何做到这一点在这里 。
总之,你在你的web.config这个元素添加到位置/ system.webServer /处理器:
<add name="XmlFileHandler" path="*.xml" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
问题是,IIS将处理.xml文件通过你的MVC应用程序的静态文件,在默认情况下没有路由XML文件。 IIS处理请求和你的MVC代码永远不会改变路由到该文件。 大约有这几个方面。
我发现,通过使用IIS重写模块重写从静态文件URL(县)的MVC路线的URL来处理最简单的方法:
<system.webServer>
<rewrite>
<rules>
<rule name="Live Writer Manifest">
<match url="*.xml"/>
<action type="Rewrite" url="route/xmlfilehandler"/>
</rule>
</rules>
</rewrite>
</system.webServer>
请确保你已经安装了IIS重写模块(独立于平台的安装程序进行安装)。 如果你已经使用重写处理程序,这是最有效的解决方案。
正如福斯特和乔恩·加洛韦的帖子上面所指出的,也可以映射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文件的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调用