Ninject,WebAPI和ExceptionFilterAttribute被调用两次

Rom*_* K. 5 c# asp.net ninject asp.net-web-api

大家早上好,

在我的项目中,我注意到Ninject的奇怪行为(至少我认为这是问题).情况如下.我用

Ninject.3.0.2-unstable-9028
Ninject.Extensions.Factory.3.0.1.0
Ninject.Web.Common.3.0.2-unstable-9012
Ninject.Web.WebApi-RC.3.0.0.22
Run Code Online (Sandbox Code Playgroud)

我更改了NinjectWebCommon.cs并添加了我的绑定代码.我有一个WebApiConfig.cs配置全局异常处理程序

public static void Register(HttpConfiguration config)
{
    // Authentication token handler.
    config.MessageHandlers.Add(new TokenAuthenticationHandler());

    // Exceptions handler.
    config.Filters.Add(new ExceptionsHandler());
    ...
 }
Run Code Online (Sandbox Code Playgroud)

我有一个异常处理程序类

public class ExceptionsHandler : ExceptionFilterAttribute
{
    ...
    public override void OnException(HttpActionExecutedContext context)
    {

        ...
        context.Response = context.Request.CreateErrorResponse(httpStatusCode, response);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当请求到达API时,它首先获取TokenAuthenticationHandler()对象,该对象执行其魔法并调用

return base.SendAsync(request, cancellationToken);
Run Code Online (Sandbox Code Playgroud)

然后,WebAPI控制器启动并发挥其魔力.如果发生异常,它将被抛出并调用ExceptionsHandler的OnException.问题是当OnException完成它的工作时,它会被同一个上下文再次调用,我找不到原因.

我没有配置两次.我在web.config中没有额外的记录.当我开始使用Ninject.Web.WebAPI-RC库时,它就开始发生了.在此之前,我使用定制的Resolvers和Contexts类,但是,没有处理Ninject创建的对象.所以,我决定用什么有用.一切都有效,除了由于某种原因OnException被调用两次.

如果我删除

config.Filters.Add(new ExceptionsHandler());
Run Code Online (Sandbox Code Playgroud)

WebApiConfig.cs然后它根本不被调用.

我认为Ninject与它有关,但我无法理解它为什么会发生.

先感谢您.

oCc*_*ing 8

试试这个

 [AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)]
 public class ExceptionsHandler : ExceptionFilterAttribute
 {
    ...
    public override void OnException(HttpActionExecutedContext context)
    {

      ...
       context.Response = context.Request.CreateErrorResponse(httpStatusCode, response);
    }
 }
Run Code Online (Sandbox Code Playgroud)

这对我有用.. =)