我试图检索int id = (int)WebSecurity.CurrentUserId
内的RouteConfig.cs
。 id
用于实体框架,以便我知道哪个控制器使用routes.IgnoreRoute()
来限制用户,但id
给了我一个
System.NullReferenceException
我试图使用此而不是属性来避免在每个/某个控制器中放置/放错位置。
答案 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