RouteConfig.cs中的C#MVC4 WebSecurity.CurrentUserId

时间:2015-03-10 09:20:57

标签: c# asp.net-mvc-4

我试图检索int id = (int)WebSecurity.CurrentUserId内的RouteConfig.csid用于实体框架,以便我知道哪个控制器使用routes.IgnoreRoute()来限制用户,但id给了我一个

System.NullReferenceException

我试图使用此而不是属性来避免在每个/某个控制器中放置/放错位置。

1 个答案:

答案 0 :(得分:2)

路由注册在Application_Start之前提前执行。在这个阶段,WebSecurity尚未初始化(即使它是,它对当前用户一无所知,因为还没有Request),所以你不能这样使用它。

如果您坚持依靠WebSecurity进行路线解析,则可以使用RouteConstraint,这些Request会在实际请求该路线时进行检查,以便您拥有HTTP 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() }
);

然后将约束附加到您的路线注册。例如:

{{1}}

请参阅MSDN

相关问题