假设您有一个页面,其中路由 /Checkout/Complete/1 完成了 OAuth google UserID 1 的订单。这在 ActionLink 中实现如下:
@Html.ActionLink("Submit>>", "Complete", "Checkout",
new { id = WebSecurity.CurrentUserId }, null)
现在,这种方法的最大缺陷是,填满购物车的网站用户只需输入 /Checkout/Complete/2 之类的链接,然后将订单放在另一个 UserId 上,这样他们就不必付款。
我试图做的是在 routeconfig 中创建一个如下所示的条目:
public static void RegisterRoutes(RouteCollection routes)
{
int currentUserId = WebSecurity.CurrentUserId;
routes.MapRoute(
name: "Checkout",
url: "{controller}/{action}/{id}",
defaults: new {controller = "Checkout", action = "Complete", id =
UrlParameter.Optional},
constraints: new { id = currentUserId }
);
}
不幸的是,这种方法不起作用。
如何创建一个约束来检查 Websecurity.CurrentUserId 是否与实际的 currentUserId 匹配,否则会引用错误页面?如果有更好的方法来实现这个目标,我很想听听他们的意见。