当前位置: 首页 > 编程语言 > C#

如何正确处理子操作异常共享

时间:2023-04-11 01:39:46 C#

如何正确处理子操作异常=编号;查看包。制表符=制表符;varviewModel=_viewModelManager.GetViewModel(tab,id);返回PartialView(string.Format("~/Views/{0}/Index.cshtml",tab),viewModel);}_viewModelManager返回一个视图。如果用户请求不存在的选项卡,则会抛出KeyNotFoundexception,但是,在我看来,我会收到以下异常:执行处理程序'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'@usingMyApplication的子请求时出错。UI.Helpers.Html@modelMyApplication.UI.Models.MyJobModel@{ViewBag.Title="Details";}@Model.Blah...*@HttpException发生在这里——呈现默认错误视图*@@Html.Action("TabInfo",new{id=ViewBag.Jobid,tab=ViewBag.Tab})根据MS...如果子操作本身发生异常,则忽略子操作方法上的HandleErrorAttribute属性。因此,子操作应该处理它们自己的异常。如果子操作应用了AuthorizeAttribute属性,该属性将执行并返回HTTPUnauthorized401状态代码。我无法使用此[HandleError(ExceptionType=typeof(KeyNotFoundException),View="myError")]并且我无法使用try/catch进行重定向,因为不支持重定向子操作。处理子操作异常的最佳方式是什么?底线:我想处理异常并返回自定义错误页面。如果在GetViewModel方法中抛出异常,那么您的return语句甚至不会得到处理,事实上,因为没有catch语句,您最终会在global.asax中出现Application_Error(如果您有的话)。你是对的,你应该做一个ContainsKey检查,如果它是假的,然后返回你的错误页面。只需将结果放在变量中的ContainsKey上并声明该变量为真?或者您可以检查viewModel变量并断言ContainsKey是否为假,然后确保您的错误视图名称实际上在viewModel中。trycatch其实不是什么好的做法,因为一般情况下,如果可以避免,就应该使用额外的逻辑(例如本例中的ContainsKey)来防止异常发生。例外情况适用于特殊情况:)。在我的例子中,我在子操作中添加了一个ModelState错误(使用自定义消息而不是异常消息)并将ValidationSummary放在子操作的部分视图中。由于父操作的摘要没有得到错误,因此它不会复制错误。当然,这仍然显示页面。就我而言,它非常好。但是你必须确保你不会在子操作returnPartialView(modelContainingPotentiallySensitiveInfo)中做这样的事情。我无法想象一个特定的场景,但通常你指向一个完全不同的错误页面的原因是首先防止与错误相关的安全漏洞。因此,如果您使用我的技术,请确保创建一个新的空模型,即未从数据库中查询的模型,以传递给部分页面。当然,如果调用PartialView时出现异常,比如cshtml出错,是没有办法返回action并显示错误的。所以这不是一个完美的解决方案,但对其他人来说可能已经足够好了。以防其他人遇到这个问题。我最终使用try/catch块来捕获KeyNotFoundexception。我记录错误,然后将用户重定向到ErrorView。在错误视图中,我使用javascript将用户重定向到适当的视图。[ChildActionOnly]publicActionResultTabInfo(intid,stringtab,stringjobno){try{varviewModel=_viewModelManager.GetViewModel(tab,id);ViewBag.Jobid=id;ViewBag.Tab=tab;返回PartialView(string.Format("~/Views/{0}/Index.cshtml",tab),viewModel);}catch(Exceptionex){returnView("Error");}}错误查看以上就是C#学习教程:如何正确处理子操作如果exception分享的所有内容对你有用,需要进一步了解C#学习教程,希望大家多加关注——@模型System.Web.Mvc.HandleErrorInfo@{Layout=null;}本文收集自网络,不代表任何内容,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: