如何将所有无效URL重定向到某个操作

时间:2012-01-21 11:03:31

标签: asp.net-mvc

我有一个家庭控制器,其Index()Foo(int id)行为和路线如下:

routes.MapRoute("Foo", "{id}", new { controller = "Home", action = "Foo" });

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );

因此,像//123这样的网址可以正常运行。但是,如果网址为/blahblah,其中blahblah不是有效的操作名称,则会收到错误

  

参数字典包含非可空类型'System.Int32'的参数'id'的空条目

这当然是正常的,因为Foo动作获取int参数而不是int?

问题是我无法使用int,因为IndexFoo操作都匹配/网址,因此还有其他不必要的Foo调用。< / p>

所以问题是,是否可以捕获上述异常或将所有无效的URL(如/blahblah)重定向到其他一些操作。

2 个答案:

答案 0 :(得分:4)

id路由定义中的Foo令牌限制为数字:

routes.MapRoute(
    "Foo",
    "{id}",
    new { controller = "Home", action = "Foo" },
    new { id = @"\d+" }
);

现在:

  • /会点击HomeController/Index
  • /123将点击HomeController/Foo并传递id = 123作为参数
  • /foobar将返回404

答案 1 :(得分:0)

如果您使用字符串ID

定义主页的索引功能,如下所示
public ActionResult Index(string id)
{
    ...
}

然后,包括/ blahblah在内的所有网址都会指向它。