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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:55:31