【发布时间】:2026-01-16 02:30:01
【问题描述】:
在我维护的项目的 Global.asax.cs 中,有一个看起来像这样的方法
private static void MapRouteWithName(string name, string url, string physicalPath, bool? checkPhysicalUrlAccess = null, RouteValueDictionary defaults = null)
{
Route route;
if ((checkPhysicalUrlAccess != null) && (defaults != null))
{
route = System.Web.Routing.RouteTable.Routes.MapPageRoute(name, url, physicalPath, checkPhysicalUrlAccess.Value, defaults);
}
else
{
route = System.Web.Routing.RouteTable.Routes.MapPageRoute(name, url, physicalPath);
}
route.DataTokens = new RouteValueDictionary();
route.DataTokens.Add("RouteName", name);
}
然后在 Global.asax.cs 中使用它来设置这样的路由:
MapRouteWithName("Change User", "User/Change/{id}/{organizationid}/{username}/{logonaccount}/{phone}", "~/User/Change.aspx", true,
new RouteValueDictionary { { "id", "0" }, { "organizationid", "0" }, { "username", "" }, { "logonaccount", "" }, { "phone", "" } });
然后在页面后面的代码中可以找到如下内容:
Response.RedirectToRoute("Change User", new
{
id = userID,
organizationid = selectedOrganizationID,
username = userName,
logonaccount = logonAccount,
phone = phone
});
现在这在大多数情况下都很好用,但在这个特定的示例中,我不知道变量 userName、logonAccount 和 phone 是否实际包含某些内容或为空。例如,当 userName 为空 ("") 并且 logonAccount 有一个值 ("abcde") 时,将引发异常:
System.InvalidOperationException: No matching route found for RedirectToRoute.
当变量之间有一个带有空字符串的变量时,似乎抛出了异常。 (这有意义吗?)我该怎么办?
【问题讨论】:
-
用户必须要有名字吗?如果是,这种情况意味着什么?
-
变量 userName、logonAccount 和 phone 实际上是搜索词。这里发生的情况是已经显示了现有用户的列表,并且单击其中一个以更改它。然后,这三个变量不会在更改页面上的表单中使用,而是为了能够返回到单击用户之前的列表页面。如果有人搜索了每个包含“abcde”的用户名,则应恢复该特定列表。
标签: c# asp.net url-routing invalidoperationexception asp.net-routing