1

我正在使用 ServiceStacks 身份验证机制创建一个 MVC3 站点。当我将 AuthenticateAttribute 添加到控制器时,我得到一个空引用异常:

System.NullReferenceException was unhandled by user code
HResult=-2147467261
Message=Object reference not set to an instance of an object.
Source=ServiceStack.FluentValidation.Mvc3
StackTrace:
at ServiceStack.Mvc.ExecuteServiceStackFiltersAttribute.OnActionExecuting(ActionExecutingContext  filterContext) in  C:\src\ServiceStack\src\ServiceStack.FluentValidation.Mvc3\Mvc\ExecuteServiceStackFiltersAttribute.cs:line 21
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)

我可以在 github 中看到 pull request #267 似乎对我的代码当前抛出的位置进行了一些 null ref 检查。我有另一个可以进行身份​​验证的项目,但是新的失败代码在更新版本的 ServiceStack 上运行,我看不出有什么区别,所以关于什么可能导致新版本的服务堆栈出现此异常的任何想法(v. 3.9.18)

这是我的配置代码:

Plugins.Add(new AuthFeature(
                        () => new AuthUserSession(), // Here a custom IAuthSession implementation could be used instead of UserSession.
                        // Allow authentication by using cookies set when authenticating with username/password credentials posted to the /auth/credentials service.
                        new IAuthProvider[]{ new CredentialsAuthProvider() }
                        )
            );
 //Enable Funq IOC in MVC controllers.
 ControllerBuilder.Current.SetControllerFactory(new FunqControllerFactory(container));


IUserAuthRepository userRepository = new OrmLiteAuthRepository(dbFactory);
container.Register(userRepository);
container.Register<ICacheClient>(new MemoryCacheClient());

        // Initialise Registration feature, providing the /register route.
        Plugins.Add(new RegistrationFeature());

还有我的控制器基类:

public abstract class ControllerBase : ServiceStackController<AuthUserSession> {
    public IDbConnectionFactory Db { get; set; }
    public ILog Log { get; set; }
    //Common extension point for all controllers. Inherits from ServiceStack to take advantage of SS powerpack + auth.
    public override string LoginRedirectUrl {
        get {
            return "/Auth/Login?redirect={0}";
        }
    }

}

4

1 回答 1

1

我更新了 ServiceStack.Mvc NuGet 包,它解决了 (v3.9.18+) 中的空引用异常。尝试更新,看看是否可以解决它。

于 2012-09-26T05:20:41.027 回答