我有一个家庭控制器,其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,因为Index
和Foo
操作都匹配/
网址,因此还有其他不必要的Foo
调用。< / p>
所以问题是,是否可以捕获上述异常或将所有无效的URL(如/blahblah
)重定向到其他一些操作。
答案 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在内的所有网址都会指向它。