我有一种情况,我正在使用可能包含电子邮件地址的 URL。例如:
http://MyUrl.com/Edit/Mike
或者
http://MyUrl.com/Edit/bob@whatever.com
根据这个 StackOverflow 问题,解决这个问题的简单方法似乎是使用查询字符串。有没有办法可以在路由规则中设置它,它可以确定值是否无效并让它回退到查询字符串?
我有一种情况,我正在使用可能包含电子邮件地址的 URL。例如:
http://MyUrl.com/Edit/Mike
或者
http://MyUrl.com/Edit/bob@whatever.com
根据这个 StackOverflow 问题,解决这个问题的简单方法似乎是使用查询字符串。有没有办法可以在路由规则中设置它,它可以确定值是否无效并让它回退到查询字符串?
这个怎么样:
路线:
routes.MapRoute(
name: "UserEdit",
url: "Edit/{user}",
defaults: new { controller = "User", action = "Edit" },
constraints: new { user = @"[a-z0-9]+" /*Add valid characters here*/ }
);
routes.MapRoute(
name: "UserEditWithIllegalChars",
url: "Edit/",
defaults: new { controller = "User", action = "Edit" }
);
该路由将仅匹配 /Edit/Mike 和 Edit/?user=bob@whatever.com 之类的 URL。
生成 URL 也可以。例如
@Html.ActionLink("1", "Edit", "User", new { user = "Mike" }, new { })
@Html.ActionLink("2", "Edit", "User", new { user = "bob@whatever.com" }, new { })
生成与上面相同的 URL
控制器:
public ActionResult Edit(string user)
注意:1)您需要检查用户是否为空 2)将有效字符添加到约束中,因为我不知道所有这些字符。