asp.net-mvc – 如何在没有其他操作匹配的情况下为我的控制器设置“默认操作”?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 如何在没有其他操作匹配的情况下为我的控制器设置“默认操作”?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
说我有以下路线:
routes.MapRoute("Default","{controller}/{action}/{id}",new { controller = "Home",action = "Index",id = "" });

也让我的控制器有以下方法:Index(Int32 id)和Edit(Int32 id).

所以/ MyController / Index / 1是该路由的有效URL. / MyController / Edit / 1

但是,如果接收到正确映射到我的控制器而不是现有操作的URL,那么如何定义“默认操作”来执行,而不是让MVC框架抛出错误屏幕?

基本上,我希望URL / MyController / Preview / 1和/ MyController / Whatever / 1执行一个我在指定{action}令牌无法映射到控制器上的现有操作时提前指定的操作.

我看到Codeplex上的MvcContrib项目有一个属性,可以使它与ConventionController一起使用,但是现在我想使用纯MS ASP.NET MVC来保持这一点.

我也看到Fredrik提到了一个[ControllerAction(DefaultAction = true)]属性,但除了他的博客之外,我找不到它的任何地方(当我在我的控制器中尝试时,我的应用程序将不会编译).

解决方法

您现在可以执行以下操作.
protected override void HandleUnknownAction(string actionName) {
  //your code here.
}

另一种方法是在默认路由上加上约束,因此它只匹配控制器上存在的方法.那么你可以有另一条路线:

routes.MapRoute("default-action","{controller}/{actionName}/{id}",new {action="DefaultAction"});

哪个映射到

public ActionResult DefaultAction(string actionName,string id) {
  //handle default action
}

这让你得到你要找的结果.

猜你在找的asp.Net相关文章