如何在ASP.NET Web API中处理OperationCanceledException?

时间:2014-02-17 18:18:40

标签: asp.net-mvc entity-framework asp.net-web-api parallel-processing

我有这个简单的控制器,使用ajax调用其Get方法,通过Entity Framework存储库查找zipcodes。

[Authorize]
public class ZipCodesApiController : AppApiController
{
    public ZipCode Get(string zipCode)
    {
        return unitOfWork.ZipCodeRepository
            .Get(x => x.Zip == zipCode)
            .FirstOrDefault();
    }
}

在制作中,我的日志显示System.OperationCanceledException: The operation was canceled.经常被抛出。我认为正在发生的事情是用户正在查看地址详细信息页面,但在ajax zipcode查找返回之前导航或关闭浏览器。我想IIS告诉我的控制器他们不再连接,.NET框架会引发异常吗?

这似乎无害,但在try中包含对ZipCodeRepository的调用并且有一个空的OperationCanceledException catch子句似乎也是一个坏主意。

我已经用Google搜索了错误,而且在并行编程中似乎出现了很多,这不是我特别熟悉的。

处理此异常的适当方法是什么?我认为忽略是安全的,但我错了,应该提醒实体框架,以便它可以清理一些东西(我的AppApiController至少有一个dispose方法?

2 个答案:

答案 0 :(得分:3)

我在我的Web API应用程序中得到了相同的异常,但是我可以使用Global.asax.cs中的Application_Error方法来捕获它们

protected void Application_Error(object sender, EventArgs e)
    {
        Exception exception = Server.GetLastError();
        Response.Clear();
        OperationCanceledException httpException = exception as OperationCanceledException;
        if (httpException != null)
        {
            var token = httpException.CancellationToken;
            if (token.IsCancellationRequested)
            {
                // clear error on server
                Server.ClearError();
                Request.Abort();
            }
        }
    }

我不知道这是不对的。

答案 1 :(得分:-1)

也可以在Visual Studio 2013上创建新项目,当我这样做时,所有问题都已解决。