gpt4 book ai didi

c# - 自定义错误处理程序

转载 作者:太空宇宙 更新时间:2023-11-03 22:56:36 24 4
gpt4 key购买 nike

我在网上搜索并拼凑了一个错误处理解决方案,但该解决方案不起作用,主要是因为我不完全了解异常管道的工作原理。我使用了不同的指南,但没有找到适合我的主题。我想让错误处理程序做的是这个。我有一个名为 workplanRepo 的类,我的所有查询都在其中执行。我已经用 try and catch block 覆盖了所有查询。我想要的是当发生错误时抛出异常,允许我为每个查询和默认异常消息自定义特定消息。然后我希望能够在异常处理程序将用户重定向到的错误 View 中检索消息。我还想要一个捕获所有其他错误的默认处理程序。但不一定有自定义消息部分。如果有人可以解释或告诉我如何实现这一目标。我会很感激!。这是其中一种查询方式:

try {
newItem["Author"] = _user.Id;
newItem["Title"] = _user.Title;

newItem.Update();
clientContext.ExecuteQuery();
}
catch (Exception e) {
throw new HttpException("Oops, there must have been an error: " + e.Message);
}

最佳答案

在 ASP.NET MVC 5 中,我们可以在 Global.asax.cs 的 Application_Error 事件 中捕获错误,而不是在每个查询中都使用 try catch block 。然后重定向到自定义错误页面。

此外,我们还可以使用Log4NetNLog等日志框架。

例如,

    protected void Application_Error(object sender, EventArgs e)
{
var exception = Server.GetLastError();

LogException(exception);

if (exception is HttpAntiForgeryException)
{
Response.Clear();
Server.ClearError();
Response.TrySkipIisCustomErrors = true;

// Call target Controller and pass the routeData.
IController controller = EngineContext.Current.Locator.GetInstance<CommonController>();

var routeData = new RouteData();
routeData.Values.Add("controller", "Common");
routeData.Values.Add("action", "AntiForgery");

var requestContext = new RequestContext(new HttpContextWrapper(Context), routeData);
controller.Execute(requestContext);
}
else
{
// Process 404 HTTP errors
var httpException = exception as HttpException;
if (httpException != null && httpException.GetHttpCode() == 404)
{
Response.Clear();
Server.ClearError();
Response.TrySkipIisCustomErrors = true;

// Call target Controller and pass the routeData.
IController controller = EngineContext.Current.Locator.GetInstance<CommonController>();

var routeData = new RouteData();
routeData.Values.Add("controller", "Common");
routeData.Values.Add("action", "PageNotFound");

var requestContext = new RequestContext(new HttpContextWrapper(Context), routeData);
controller.Execute(requestContext);
}
}
}

private void LogException(Exception ex)
{
if (ex == null)
return;

// Ignore 404 HTTP errors
var httpException = ex as HttpException;
if (httpException != null &&
httpException.GetHttpCode() == 404)
return;

try
{
// Log error message
}
catch (Exception)
{
// Don't throw new exception if occurs
}
}

您可以在 GitHub 查看使用 Log4Net 的示例项目.

关于c# - 自定义错误处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45089059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com