c# - Ninject、WebAPI 和 ExceptionFilterAttribute 被调用两次

标签 c# asp.net asp.net-web-api ninject

大家早上好

我注意到 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 并使用我的绑定(bind)添加了代码。我有一个配置全局异常处理程序的 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 Controller 启动并发挥它的魔力。如果出现异常,它会被抛出并调用 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);
    }
 }

这对我有用.. =)

关于c# - Ninject、WebAPI 和 ExceptionFilterAttribute 被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21867590/

相关文章:

javascript - 无法使用 javascript 将 http POST 请求发送到 ASP.NET Web api Controller

.net Core WebApi 内容协商

c# - 如何对具有图像的 GridView 列进行排序

c# - 如何使用 Simple Injector 注册嵌套泛型类型?

asp.net - Javascript 在 MasterPage 中访问控制

c# - ASP.NET Identity 2.2.1 - 发送带有代码而不是链接的确认电子邮件

c# - Monotouch OpenGL 视网膜显示支持

c# - 如何获取通过Json获取的对象内部的值

c# - 尝试了解 "Common"与 ASP.NET 和 HttpClient() 的异步死锁

asp.net - DropDownList 值到 DataType.Date 模型 (ASP.NET MVC 4)