我有这个简单的控制器,使用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方法?
答案 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上创建新项目,当我这样做时,所有问题都已解决。