ASP.NET路由传null参数引发异常,如何解决?
ASP.NET路由传null参数触发ArgumentNullException的解决方法
问题原因
你注册的路由MyPage/{myParameter}中,{myParameter}是必填参数。当调用GetRouteUrl("RouteMyPage", null)时,路由系统找不到符合要求的匹配规则,会返回null;而Response.Redirect不允许传入null作为URL参数,因此抛出System.ArgumentNullException。
解决方法
1. 将路由参数设为可选
如果业务允许myParameter为空,修改路由定义,在参数名后加?标记为可选:
routes.MapPageRoute("RouteMyPage", "MyPage/{myParameter?}", "~/MyPage.aspx");
此时即使传入null参数,GetRouteUrl会生成/MyPage的URL,不会返回null,Response.Redirect可以正常执行。
2. 调用前处理null参数
如果myParameter必须存在,但业务场景可能出现null,提前给参数设默认值或分支处理:
// 给null参数设置默认值 var paramValue = myParam ?? "default"; var url = GetRouteUrl("RouteMyPage", new { myParameter = paramValue }); Response.Redirect(url); // 或者分支跳转 if (myParam == null) { Response.Redirect("~/MyPage.aspx"); } else { Response.Redirect(GetRouteUrl("RouteMyPage", new { myParameter = myParam })); }
3. 避免直接传null给GetRouteUrl
即使参数值为null,也用匿名对象包裹传递,同时增加URL非空判断:
var url = GetRouteUrl("RouteMyPage", new { myParameter = (string)null }); if (!string.IsNullOrEmpty(url)) { Response.Redirect(url); } else { // 路由匹配失败时的降级处理 Response.Redirect("~/MyPage.aspx"); }
总结
不是完全禁止传递null参数,而是你的路由规则要求参数必填,导致参数为null时路由匹配失败,生成了null URL。核心解决思路要么调整路由规则允许参数可选,要么在调用前处理null场景,避免传入null给Response.Redirect。
内容的提问来源于stack exchange,提问作者Softrich
相关产品推荐
相关产品推荐

