gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:37:28 31 4
gpt4 key购买 nike

大家早上好

我注意到 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com