这听起来应该很简单,但我似乎无法让它发挥作用。
我需要添加一个匹配给定文件名和扩展名的路由,而不管子目录(包括网站的根目录)
可能的请求可以是
形式/myfile.xml
/somedirectory/myfile.xml
/any/number/of/directories/myfile.xml
我需要将它们全部匹配并路由到相同的控制器动作。
我尝试在路线网址中使用wilcards,例如
routes.MapRoute(
"MyFileRoute",
"{*path}/myfile.xml",
new { controller = "MyFileController", action = "GetMyFile" }
);
但是我收到以下错误
A catch-all parameter can only appear as the last segment of the route URL.
Parameter name: routeUrl
我无法控制请求本身,因为它来自第三方Flash插件,并且似乎在寻找它认为html文件所在的文件,因为我使用的是MVC,这不是物理位置。
答案 0 :(得分:1)
你真的必须使用路由吗?好老的 HttpHandler 怎么样?
<configuration>
<system.web>
<httpHandlers>
<add verb="GET"
path="*/myfile.xml"
type="MyFileHandler"/>
</httpHandlers>
<system.web>
</configuration>
答案 1 :(得分:1)
好的,所以我猜你所拥有的只是一把锤子......
在花费太多时间尝试使路由或处理程序工作之后,我最终以不同的方式查看此内容并使用IIS7 Url Rewrite在任何路径中重写myfile.xml
的请求实际文件的实际物理位置。
我可以很容易地将它路由到控制器操作,但首先存在的唯一原因是在这种情况下提供文件所以不再需要。
我将此规则添加到配置文件中,似乎运行良好。
<rewrite>
<rules>
<clear />
<rule name="Redirect myfile" patternSyntax="Wildcard" stopProcessing="true">
<match url="*/myfile.xml" />
<action type="Rewrite" url="/actual/path/myfile.xml" />
</rule>
</rules>
</rewrite>
答案 2 :(得分:0)