想象一下,您有一个页面,其中路径/结帐/完成/ 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匹配,否则引用错误页面?如果有更好的方法来实现这一目标,我很乐意听到它们。
答案 0 :(得分:0)
好的,只要输入问题,我就能更好地了解我想要完成的任务。我通过将if语句(id == WebSecurity.CurrentUserId)添加到CheckoutController文件来解决了这个问题,如下所示:
// GET: /Checkout/Complete
[Authorize]
public ActionResult Complete(int id)
{
if (id == WebSecurity.CurrentUserId)
{
//do stuff
}
else {
//tell user to not do that
}
}
这有效!
不幸的是,当你访问例如/ Checkout / Complete / joe时,我们仍然会收到消息
The parameters dictionary contains a null entry for parameter 'id' of non-nullable
type 'System.Int32' for method 'System.Web.Mvc.ActionResult Complete(Int32)'
我认为这确实需要在routeconfig.cs中使用约束来修复。任何人都知道怎么做?