簡體   English   中英

RouteConfig.cs中的C#MVC4 WebSecurity.CurrentUserId

[英]C# MVC4 WebSecurity.CurrentUserId inside RouteConfig.cs

我正在嘗試檢索int id = (int)WebSecurity.CurrentUserIdint 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM