首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET MVC -路由-带有文件扩展名的操作

ASP.NET MVC -路由-带有文件扩展名的操作
EN

Stack Overflow用户
提问于 2014-03-04 07:02:49
回答 3查看 18.9K关注 0票数 35

有没有一种方法可以实现调用URL http://mywebsite/myarea/mycontroller/myaction.xml这基本上是“假的”请求一个文件,但结果将是一个为动态创建的文件提供服务的操作操作?

我试过这个:

代码语言:javascript
复制
context.MapRoute(
                "Xml_filename",
                "Xml/{controller}/{action}.xml"
            );

但是,只要URL中有文件扩展名,路由就会失败,行为就像我直接请求文件一样。

我怀疑这可能是因为使用了无扩展名的url处理程序。

代码语言:javascript
复制
<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" />

感谢您的任何建议。

雅各布

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-04 08:04:06

您需要将对XML文件的请求映射到web.config中的TransferRequestHandler。否则,IIS将处理该请求。

Jon Galloway解释了如何做到这一点here

总之,将此元素添加到web.config中的location/system.webServer/handlers:

代码语言:javascript
复制
<add name="XmlFileHandler" path="*.xml" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
票数 37
EN

Stack Overflow用户

发布于 2015-11-15 16:57:34

问题在于,IIS会将.xml文件作为静态文件处理,并且在默认情况下不会通过MVC应用程序路由该文件。IIS处理该请求,并且MVC代码永远不会更改路由到此文件的路径。有几种方法可以解决这个问题。

我已经找到了处理此问题的最简单方法,即使用IIS重写模块将URL从静态文件URL重写为MVC路由:

代码语言:javascript
复制
<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中的东西:

代码语言:javascript
复制
<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。例如:

代码语言:javascript
复制
[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

票数 13
EN

Stack Overflow用户

发布于 2014-03-04 07:44:19

如果您将xml文件放入网站内的某个文件夹中。试试下面这样的代码:C# - How to make a HTTP call

票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22159419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档