0

我有一种情况,我正在使用可能包含电子邮件地址的 URL。例如:

http://MyUrl.com/Edit/Mike

或者

http://MyUrl.com/Edit/bob@whatever.com

根据这个 StackOverflow 问题,解决这个问题的简单方法似乎是使用查询字符串。有没有办法可以在路由规则中设置它,它可以确定值是否无效并让它回退到查询字符串?

4

1 回答 1

0

这个怎么样:

路线:

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)将有效字符添加到约束中,因为我不知道所有这些字符。

于 2013-05-21T15:18:56.927 回答