[英]C# MVC4 WebSecurity.CurrentUserId inside RouteConfig.cs
我正在嘗試檢索int id = (int)WebSecurity.CurrentUserId
的int id = (int)WebSecurity.CurrentUserId
RouteConfig.cs
。 id
在實體框架中使用,因此我將通過使用routes.IgnoreRoute()
知道哪個控制器限制了用戶,但是id
給了我一個
System.NullReferenceException
我正在嘗試使用它而不是屬性來避免在每個/某些控制器中放置/錯放它。
路線注冊是在Application_Start
早期執行的。 在此階段, WebSecurity
尚未初始化(即使已經初始化,因為尚無Request
,它對當前用戶一無所知),因此您不能以這種方式使用它。
如果您堅持依靠WebSecurity
進行路由解析,則可以使用RouteConstraint
,它會在實際請求該路由時進行檢查,因此您將擁有一個HTTP Request
和完整的經過身份驗證/未經身份驗證的用戶。
例如:
public class CheckUserIdRouteConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
if (!WebSecurity.Initialized)
return false;
var userId = WebSecurity.CurrentUserId;
// check your user id
return userId == 1;
}
}
然后將約束附加到您的路線注冊。 例如:
routes.MapRoute(
name: "SomeRoute",
url: "SomeRoute/{action}",
defaults: new { controller = "MyCtrl", action = "Index" },
constraints: new { CheckUserId = new CheckUserIdRouteConstraint() }
);
參見MSDN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.