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

asp.net-mvc – ASP.NET MVC路由冲突 – 输入变量的null值

发布时间:2020-12-16 04:02:13 所属栏目:asp.Net 来源:网络整理
导读:我不知道为什么我的路线有冲突.我在我的Global.asax文件中有这些: routes.MapRoute( "CustomerView","{controller}/{action}/{username}",new { controller = "Home",action = "Index",username = "" } ); routes.MapRoute( "Default","{controller}/{actio
我不知道为什么我的路线有冲突.我在我的Global.asax文件中有这些:
routes.MapRoute(
        "CustomerView","{controller}/{action}/{username}",new { controller = "Home",action = "Index",username = "" }
        );

        routes.MapRoute(
        "Default","{controller}/{action}/{id}",id = "0" }
        );

到目前为止,一切都运行良好,除非我创建一个控制器动作,如下所示:

public ActionResult MyAction(int id)
    {
        //Do stuff here
        return View();
    }

当我尝试通过http://mydomain/MyController/MyAction/5查看它时,我得到:

Server Error in ‘/’ Application.

The parameters dictionary contains a
null entry for parameter ‘id’ of
non-nullable type ‘System.Int32’ for
method ‘System.Web.Mvc.ActionResult
Track(Int32)’ in
‘InTouch.Controllers.OrderController’.
To make a parameter optional its type
should be either a reference type or a
Nullable type. Parameter name:
parameters

向我建议id值没有被正确读取.当然enoguh,当我交换周围的路线顺序它工作正常.到目前为止,我的(理所当然有限的)理解是,如果路由中指定的变量名与控制器动作定义中指定的变量名匹配,则它将假定一个不管顺序.显然我错了.交换订单会导致其他控制器操作中断.在这种情况下,处理我的路线的正确方法是什么?

解决方法

你的例子的问题是匹配发生在第一条路线上,它看到“5”作为用户名参数.您可以使用约束来限制每个参数接受的值,以实现您想要的效果.由于接受Id的“默认”路由比“CustomerView”路由更具限制性,因此我首先列出“默认”路由,并对Id参数进行约束:
routes.MapRoute(
    "Default",id = "0" },new { id = @"d+" } 
    );

如果Id是整数值,这将导致第一个路径仅匹配.然后,所有其他请求将进入“CustomerView”路由,该路由将获取没有整数作为第三个参数的任何其他请求.

查看Creating a Route Constraint以获取约束的解释.

(编辑:李大同)

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

    推荐文章
      热点阅读