首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExceptionHandler in c# WebAPI

ExceptionHandler in c# WebAPI
EN

Stack Overflow用户
提问于 2016-05-18 09:35:00
回答 1查看 496关注 0票数 1

我有个问题想知道这东西到底是怎么工作的。

代码语言:javascript
复制
public class GlobalExceptionHandler: ExceptionHandler
{
    private string _pvtMsg;

    public override void handle(ExceptionHandlerContext context)
    {
        //few if else conditions
        if()
        {
        }
        else if
        {
            _pvtMsg = "some value";
        }
        context.Result="Some random value depending upon if else execution";
    }
}

现在,当在此之后设置_pvtMsg时,每当出现异常时,它总是具有与以前相同的值。

当我在_pvtMsg = "a";条件下设置else if时,下次发生错误时_pvtMsg仍然有值"a"吗?

在我的应用程序的整个生命周期中,是否只有一个handler实例可用,因此正在发生这种情况?或者还有其他原因?如有任何文件可供参考,不胜感激。

顺便说一句:这个处理程序是通过RegisterWebApiConfig方法注册的。

代码语言:javascript
复制
config.Services.Replace(typeof(IExceptionHandler), new GlobalExceptionHandler()); 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-18 09:43:53

你的假设是正确的。由于您注册了一个实例,所以 of GlobalExceptionHandler (使用new关键字) _pvrMsg将始终具有上一次(成功)调用的值。

如果_pvrMsg对于您计划在if块中执行的操作至关重要,我建议锁定代码的这一部分,以确保handle不会一次执行多次。

最简单的方法是:

代码语言:javascript
复制
public class GlobalExceptionHandler: ExceptionHandler
{
    private string _pvtMsg;
    private readonly object _lock = new object();

    public override void handle(ExceptionHandlerContext context)
    {
        lock(_lock)
        {
            //few if else conditions
            if()
            {
            }
            else if
            {
                _pvtMsg = "some value";
            }
            context.Result="Some random value depending upon if else execution";
        }
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37295650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档