You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC路由异常:localhost:50675/test/101访问报错

问题分析与解决方案

你遇到的这个异常,核心原因是路由定义的URL参数名和Action方法的参数名不匹配,导致MVC无法正确将URL中的值绑定到Action的参数上,具体来说:

你的自定义路由里,URL模板是{controller}/{id},但你在默认值里指定的是custid = UrlParameter.Optional,同时Action方法的参数是int custid。当你访问localhost:50675/test/101时,路由系统会把URL中的101识别为id参数的值,但你的Action并没有id参数,只有custid,所以就会出现参数字典中custid为null的异常(而int是非可空类型,自然报错)。

而localhost:50675/test?custid=101能正常访问,是因为这种方式是通过查询字符串传递参数,MVC会直接根据参数名称进行匹配,不需要依赖路由模板里的参数定义,所以能正确绑定到custid。

下面给你两种可行的解决方法:

方法一:修改路由模板的参数名,与Action参数一致

把自定义路由的URL模板里的{id}改成{custid},这样URL中的值就能直接绑定到Action的custid参数上:

routes.MapRoute(
    name: "custom1",
    url: "{controller}/{custid}", // 将{id}替换为{custid}
    defaults: new { controller = "Test", action = "Index", custid = UrlParameter.Optional }
);

方法二:修改Action的参数名,与路由模板参数一致

如果你不想修改路由,可以把Action方法的custid参数改成id,这样路由里的{id}就能正确绑定:

public class TestController : Controller {
    // GET: Test
    public ActionResult Index(int id) { // 将custid改为id
        return View();
    }
}

两种方法任选其一即可,修改后再访问localhost:50675/test/101就能正常进入Action方法了。另外要注意路由的顺序,你的自定义路由已经放在默认路由前面,这是正确的,因为MVC会按顺序匹配路由规则。

内容的提问来源于stack exchange,提问作者Mist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:47:23