ASP.NET MVC通配符控制器任意参数路由

3

我希望有一个控制器/动作,这样当我导航到:

mysite.com/whatever. i type here will pipe into...a ! string.

public ActionResult Index(string anything)
{
    // anything = whatever. i type here will pipe into...a ! string.
    return View();
}

我需要设置自定义路由吗?

我已经尝试过这个方法,但好像不能处理句号等符号。

        routes.MapRoute(
            name: "Default",
            url: "{*anything}",
            defaults: new { controller = "Home", action = "Index" }
        );

这是因为一个句点会导致IIS接管并尝试静态地提供它认为是一个文件的内容,而不是将其移交给MVC。 - Chris Pratt
我从未尝试过这个,但属性路由可能是你可以研究的东西。不确定它是否像Chris说的那样接受句点。 - Gjohn
谢谢你的想法,我仍然没有想出一个理想的解决方案。有没有什么非常独特的解决办法? - aherrick
1个回答

5
如果你使用一个全匹配的正则表达式限制你的路由:
routes.MapRoute(
    "Default",
    "{*anything}",
    new { controller = "Home", action = "Index" },
    new { anything = @"^(.*)?$" }
);

请确保您在web.config中设置了UrlRoutingModule且没有前提条件,以确保即使是未经管理的请求(例如那些被认为具有扩展名的请求)也会通过路由模块。这样,您的通配符路由应该可以正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接