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

ASP.NETMVC自定义错误分享

时间:2023-04-10 12:05:58 C#

ASP.NETMVC自定义错误我的目标是创建一个错误处理程序来处理应用程序中的所有托管错误,而不仅仅是与MVC相关的错误。所以我没有使用HandleErrorAttribute模式,因为它只针对MVC错误,而不是其他托管错误。在我的Global.asax中我有:protectedvoidApplication_Error(){stringdisplayError=ConfigurationManager.AppSettings["DisplayError"];NameValueCollection服务器变量;int循环1,循环2;StringBuilderserverVariableKeys=newStringBuilder();异常异常=Server.GetLastError();HttpExceptionhttpException=作为HttpException的异常;if(HttpContext.Current!=null){//遍历并获取服务器变量}if(exception!=null)//记录错误//如果设置为基本模式则重定向到错误页面if(!string.IsNullOrWhiteSpace(displayError)&&displayError.ToLower()=="basic"){Response.Clear();服务器.ClearError();//需要重定向才能工作varrouteData=newRouteData();routeData.Values["controller"]="Error";routeData.Values["action"]="General";routeData.Values["异常"]=异常;Response.StatusCode=500;if(httpException!=null){Response.StatusCode=httpException.GetHttpCode();开关(Response.StatusCode){c案例403:routeData.Values["action"]="Http403";休息;案例404:routeData.Values["action"]="Http404";休息;=newRequestContext(newHttpContextWrapper(Context),routeData);errorsController.Execute(rc);我有一个ErrorController,它有General、Http403和Http404Actions我有对应于每个动作的视图。在我的web.config中,我有:这适用于许多与托管代码相关的场景,但是当IIS接管时,例如错误的静态文件调用(example.com/BadFileName.gif),它将从IIS返回错误,该错误揭示了服务器详细信息,例如本地文件路径。这是因为web.config中的以下行:但是,当我将errorMode设置为其他值(如自定义)或只是删除该行时,我的自定义错误处理停止工作并返回错误,包括托管代码所有内容的默认IIS错误消息.我已经尝试了很多方法来自定义错误,没有这个设置就没有运气,包括:当我逐步调试时,我可以看到对控制器的调用,但最后IIS发送了响应。错误日志记录确实被正确地称为Application_Error,因此代码确实允许应用程序将其处理到某个点。应用详情:有没有办法不使用并使其工作?您看到该行为的原因可能是您正在调用Application_Error处理程序(并调用您的控制器),但IIS正在拦截500错误并显示其自己的错误页面。(尽管您的Application_Error处理程序本身可能会抛出一个异常,这是您想要排除的异常)因为您想要处理所有错误(比如您提到的静态文件错误),您可能不能依赖ASP.NET或ASP。NETMVC为您进行初始错误检查。并非所有错误都来自您的应用程序!最好的办法是尽可能多地依赖IIS7.5错误处理,而不是试图过早地介入。让IIS为您进行初始错误检查会更容易。尝试将以下内容放入您的web.config中,替换现有的httpErrors节点:-完全删除customErrors节点。这是不必要的。请记住并确保您的错误控制器设置了正确的状态代码:-publicActionResultForbidden(){Response.StatusCode=403;返回this.View();然后,除了注销Application_Error处理程序之外,您还应该能够丢弃所有内容——尽管我认为您最好创建自己的HttpModule;在web.config的模块节点上设置runAllManagedModulesForAllRequests可以帮助您捕获否则会运行AllManagedModulesForAllRequests的错误。我已经在AzureWebsitesPreview上运行了这个设置(尽管我个人使用elmah进行日志记录)并且它捕获了所有内容,除了明显由于无法解析web.config而导致的任何错误。我在github上提供了一个完整的工作示例,使用httpErrors自定义错误页面。您也可以在Azure的网站上看到它。如果您想在您的应用程序中处理这个问题,您可以编写一个自定义处理程序或使用HandleError属性。这是一个很好的示例,说明如何在不使用IIS作为拐杖的情况下解决这个问题。因为并非所有IIS托管提供商都允许在服务器级别进行此类自定义,而IMO是一种糟糕的方法,因为它会在部署时创建额外的配置。以上就是C#学习教程:ASP.NETMVC自定义错误分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: