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
我更改了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());
    ...
 }
我有一个异常处理程序类
public class ExceptionsHandler : ExceptionFilterAttribute
{
    ...
    public override void OnException(HttpActionExecutedContext context)
    {
        ...
        context.Response = context.Request.CreateErrorResponse(httpStatusCode, response);
    }
}
现在,当请求到达API时,它首先获取TokenAuthenticationHandler()对象,该对象执行其魔法并调用
return base.SendAsync(request, cancellationToken);
然后,WebAPI控制器启动并发挥其魔力.如果发生异常,它将被抛出并调用ExceptionsHandler的OnException.问题是当OnException完成它的工作时,它会被同一个上下文再次调用,我找不到原因.
我没有配置两次.我在web.config中没有额外的记录.当我开始使用Ninject.Web.WebAPI-RC库时,它就开始发生了.在此之前,我使用定制的Resolvers和Contexts类,但是,没有处理Ninject创建的对象.所以,我决定用什么有用.一切都有效,除了由于某种原因OnException被调用两次.
如果我删除
config.Filters.Add(new ExceptionsHandler());
从WebApiConfig.cs然后它根本不被调用.
我认为Ninject与它有关,但我无法理解它为什么会发生.
先感谢您.
试试这个
 [AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)]
 public class ExceptionsHandler : ExceptionFilterAttribute
 {
    ...
    public override void OnException(HttpActionExecutedContext context)
    {
      ...
       context.Response = context.Request.CreateErrorResponse(httpStatusCode, response);
    }
 }
这对我有用.. =)