加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 23:34:32 所属栏目:asp.Net 来源:网络整理
导读:说我有以下路线: routes.MapRoute("Default","{controller}/{action}/{id}",new { controller = "Home",action = "Index",id = "" }); 也让我的控制器有以下方法:Index(Int32 id)和Edit(Int32 id). 所以/ MyController / Index / 1是该路由的有效URL. / My
说我有以下路线:
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
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读