Tag: error handling

如何正确处理子操作exception

我有一个返回PartialView的Action: [ChildActionOnly] public ActionResult TabInfo(int id, string tab) { ViewBag.Jobid = id; ViewBag.Tab = tab; var viewModel = _viewModelManager.GetViewModel(tab, id); return PartialView(string.Format(“~/Views/{0}/Index.cshtml”, tab), viewModel); } _viewModelManager从Dictionary中返回一个视图。 如果用户请求不存在的选项卡,则会抛出KeyNotFoundexception,但是,在我的视图中,我得到以下exception: Error executing child request for handler ‘System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper’ @using MyApplication.UI.Helpers.Html @model MyApplication.UI.Models.MyJobModel @{ ViewBag.Title = “Details”; } @Model.Blah … *@ HttpException occurs here — renders default error view *@ […]

来自太多捕获错误的糟糕表现?

我在C#(.NET 2.0)中有一个大项目,它包含由SubSonic生成的非常大的代码块。 像这样的尝试捕获导致可怕的性能打击? for (int x = 0; x < identifiers.Count; x++) {decimal target = 0; try { target = Convert.ToDecimal(assets[x + identifiers.Count * 2]); // target % } catch { targetEmpty = true; }} 发生的事情是,如果传入的给定字段不是可以转换为小数的字符,则会设置一个标志,然后在记录中进一步使用该标志以确定其他内容。 问题是,当我通过30k记录进行解析时,应用程序实际上会抛出数以万计的exception。 整个过程花了将近10分钟的时间来完成所有事情,我的总体任务是改善一些时间,如果这是一个糟糕的设计理念,这似乎很容易挂掉水果。 任何想法都会有所帮助(善良,这是一个悲惨的一天) 谢谢,克里斯

正确处理文件流和二进制流以及处理文件流

实际上,我尝试了对代码进行防错并最终使其看起来非常混乱。 我有一个function设置来读取某种类型的文件。 我希望函数在出现问题时返回false,如果一切正常则返回true。 我无法弄清楚如何构建一切。 我有一个尝试打开文件流的初始try-catch块。 在那之后,我在读取过程中进行了一些其他检查,例如文件大小和某些偏移处的值。 我设置的方式是使用if else语句。 如: if(condition){ } else{ MessageBox.Show(“There was an error”); br.Dispose(); fs.Dispose(); return false; } … br是二进制阅读器,fs是文件流。 像这样有很多块,这么多次写同样的东西似乎是不好的做法。 首先想到的是将整个事物包装在try-catch语句中并抛出exception而不是使用if else块。 我记得在阅读try-catch语句时,拥有它们是好的,但不要用它们包装所有内容。 说实话,我仍然不完全理解为什么在try catch语句中包装所有内容都是不好的做法,因为它们只有在出现错误时才会生效,在这种情况下程序正在向南移动… 此外,我是否必须关闭二进制阅读器和文件流,或者关闭一个关闭另一个? 有没有办法使用它们而不必处理它们?

统一处理非托管API中的错误代码

我正在编写一个包含相当大的非托管API的包装器。 几乎每个导入的方法在失败时都会返回一个常见的错误代码。 现在,我这样做: ErrorCode result = Api.Method(); if (result != ErrorCode.SUCCESS) { throw Helper.ErrorToException(result); } 这很好用。 问题是,我有很多非托管方法调用,这会非常令人沮丧和重复。 所以,我尝试切换到这个: public static void ApiCall(Func apiMethod) { ErrorCode result = apiMethod(); if (result != ErrorCode.SUCCESS) { throw Helper.ErrorToException(result); } } 这允许我将所有这些调用减少到一行: Helper.ApiCall(() => Api.Method()); 然而,这有两个直接的问题。 首先,如果我的非托管方法使用out参数,我必须首先初始化局部变量,因为方法调用实际上是在委托中。 我希望能够简单地声明一个目的地而不初始化它。 其次,如果抛出exception,我真的不知道它来自何处。 调试器跳转到ApiCall方法,堆栈跟踪仅显示包含对ApiCall的调用而不是委托本身的方法。 由于我可以在单个方法中进行许多API调用,这使调试变得困难。 然后我考虑使用PostSharp来包装所有非托管调用以及错误代码检查,但我不确定如何使用extern方法。 如果最终只是为每个人创建一个包装器方法,那么我会ApiCall与ApiCall方法相同的exception问题,对吧? 另外,如果调试器只存在于已编译的程序集中,那么调试器如何知道如何在我的代码中向我显示抛出exception的站点? 接下来,我尝试实现一个自定义封送器,它将拦截API调用的返回值并检查那里的错误代码。 遗憾的是,您无法应用自定义封送程序来返回值。 但我认为如果有效的话,那将是一个非常干净的解决方案。 [return: MarshalAs(UnmanagedType.CustomMarshaler, […]

c#中的IErrorInfo

有一个C ++ COM。 它有时会在SomeMethod()上抛出一个exeption。 C ++ Com支持ISupportErrorInfo并填充IErrorInfo 。 如何在c#中获取IErrorInfo.Description ? 此代码捕获错误,但其中没有cpp消息。 try { COM.SomeMethod() } catch (COMException exn) { string ACppErrorMessage = exn.message; outputError(ACppErrorMessage); }

使用WebClient.DownloadFileAsync时如何处理exception

我通过以下方式使用WebClient从Internet下载一些文件: try { ManualResetEvent mr = new ManualResetEvent(false); mr.Reset(); using (WebClient wc = new WebClient()) { wc.DownloadFileCompleted += ((sender, args) => { if (args.Error == null) { File.Move(filePath, Path.ChangeExtension(filePath, “.jpg”)); mr.Set(); } else { //how to pass args.Error? } }); wc.DownloadFileAsync(new Uri(string.Format(“{0}/{1}”, Settings1.Default.WebPhotosLocation, Path.GetFileName(f.FullName))), filePath); mr.WaitOne(); } } catch (Exception ex) { //Catch my error […]

使用Server.TransferRequest()传递视图模型

我正在尝试微调我的MVC应用程序中的error handling。 我在web.config中启用了自定义错误,并将以下代码添加到Application_Error 。 Global.asax中 protected void Application_Error(object sender, EventArgs e) { Exception exception = Server.GetLastError() as Exception; if (exception != null) { Context.ClearError(); Context.Response.TrySkipIisCustomErrors = true; string path = (exception is HttpException && (exception as HttpException).GetHttpCode() == 404) ? “~/Error/NotFound” : “~/Error/Index”; Context.Server.TransferRequest(path, false); } } ErrorController.cs [AllowAnonymous] public ActionResult Index() { Response.Clear(); Response.StatusCode […]

无法在Web Api 2中的BadRequest上获取错误消息

我已经google了很多搜索我的问题的答案没有运气所以,让我们尝试,如果别人可以帮助我。 在进行一些validation后,我有一个Web Api 2操作来注册用户。 如果一切正常,它将返回序列化用户,如果没有,则返回BadRequest响应中发送的错误消息。 另一方面,我有一个WPF客户端调用API进行响应。 我的问题是我无法得到错误发送的原因,客户端只是得到Bad Request错误消息。 这是代码的一部分: Web Api动作: public async Task AddUser(NewUserDTO { if (!ModelState.IsValid) { return BadRequest(ModelState); } if (!model.IdCliente.HasValue) { ModelState.AddModelError(“”, “No existe el cliente”); return BadRequest(ModelState); } // do save stuff return Ok(TheModelFactory.Create(user)); } 客户端function: public async Task AddUser(NewUserDTO dto) { using (var client = new HttpClient()) { client.BaseAddress […]

捕获服务器端的所有JavaScript客户端错误

如何捕获客户端代码中出现的任何exception,例如Chrome开发人员工具上的“暂停捕获的exception”?

为什么手动引发的瞬态错误exception被处理为AggregateException?

当我尝试手动引发瞬态exception时,它总是作为AggregateException处理。 由于它作为AggregateException处理,因此在我的重试策略中不会将其作为暂时性error handling,也不会针对预定义的重试计数进行重试。 此处显示瞬态错误。 因此,我尝试了CommunicationException和ServerErrorException但它作为AggregateException处理。 当我查找AggregateException时,它会显示“表示在应用程序执行期间发生的一个或多个错误”。 是的,它非常有用!!! 以下是我案例的示例代码: 我有一个使用ServiceBusTransientErrorDetectionStrategy的重试策略 public void TestManually() { var retryPolicy = new RetryPolicy(RetryStrategy.DefaultFixed); retryPolicy.Retrying += (obj, eventArgs) => { Trace.TraceError(“Hey!! I’m Retrying, CurrentRetryCount = {0} , Exception = {1}”, eventArgs.CurrentRetryCount, eventArgs.LastException.Message); }; retryPolicy.ExecuteAsync(() => MyTestFunction().ContinueWith(t => { if (t.Exception != null) { // A non-transient exception occurred or retry limit […]