MVC3路由请求的文件名

时间:2013-06-20 19:00:19

标签: asp.net-mvc-3

我有一个基于Flash的组件,它坚持要求我当前所在的“目录”中的XML设置文件。

这意味着它要求像...这样的路径。

/Home/mysettings.xml
/Home/Record/mysettings.xml
/AnotherController/AnotherAction/mysettings.xml

这很烦人。我正在尝试创建一个MVC路由以捕获mysettings.xml的任何内容并将它们发送到静态操作。我已经为XML创建了一个视图,我可能需要动态交换变量(可能使用某种URL查询)。

这是我Global.asax.cs中的第一次尝试:

routes.MapRoute(
    "XmlOverride",
    "mysettings.xml",
    new { controller = "Home", action = "MyXML" }
);

但我错过了一些东西。无论我做什么,它都是404或不到正确的位置。有没有办法让它路由到正确的行动?我可以在此过程中保留URL变量吗?

谢谢!

更新

我有一个像这样工作的黑客版本。我不确定这是最好的方式,但似乎有效。有没有人有更好的解决方案?

routes.MapRoute(
    "XmlOverride",
    "{c}/mysettings.xml",
    new { controller = "Home", action = "MyXML" }
);
routes.MapRoute(
    "XmlOverride+Action",
    "{c}/{a}/mysettings.xml",
    new { controller = "Home", action = "MyXML" }
);

您无法使用{controller}{action},因为它位于固定路径上。

1 个答案:

答案 0 :(得分:1)

基于this answer,您可以重写网址。

<rewrite>
  <rules>
    <rule name="MySettingsRewrite">
      <match url="(\w+)mysettings\.xml$" />
      <action type="Rewrite" url="/Home/MyXML" />
    </rule>
  </rules>
</rewrite>

你必须仔细检查正则表达式,不确定我是否正确。

我能想到的唯一其他选择是实现自己的Route Handler类并使用它。