ASP.NET MVC - 路由 - 文件扩展动作ASP.NET MVC - 路由 - 文件扩展

2019-05-11 22:40发布

有没有办法实现调用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

Answer 1:

您需要为您的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" />


Answer 2:

问题是,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



Answer 3:

如果您在自己的网站内的一个文件夹拖放您的XML文件。 尝试是这样的: C# -如何让一个HTTP调用



文章来源: ASP.NET MVC - Routing - an action with file extension