C# 如何在ASP.NETMVC中处理异常和自定义错误页面
我正在学习ASP.NET MVC中的异常处理,我试图实现的是单个自定义错误页面,该页面显示带有异常详细信息的错误,当然,这些信息可能会因生成位置的不同而有所不同。我不确定是否在正确的轨道上开始! 但是,我有读取SQL存储过程和返回值的C#代码,我想添加代码级异常处理,即try、catch和finally,但希望在自定义错误页面上显示错误。我怎样才能做到这一点C# 如何在ASP.NETMVC中处理异常和自定义错误页面,c#,asp.net-mvc,exception-handling,C#,Asp.net Mvc,Exception Handling,我正在学习ASP.NET MVC中的异常处理,我试图实现的是单个自定义错误页面,该页面显示带有异常详细信息的错误,当然,这些信息可能会因生成位置的不同而有所不同。我不确定是否在正确的轨道上开始! 但是,我有读取SQL存储过程和返回值的C#代码,我想添加代码级异常处理,即try、catch和finally,但希望在自定义错误页面上显示错误。我怎样才能做到这一点 public List<GetAllFunction_SP_Map> GetAllFunction_From_StorePro
public List<GetAllFunction_SP_Map> GetAllFunction_From_StoreProcedure()
{
List<GetAllFunction_SP_Map> query;
using (var dbContext = new FunctionContext())
{
query = dbContext.Database.SqlQuery<GetAllFunction_SP_Map>("exec GetAllFunction").ToList();
}
return query;
}
public List GetAllFunction_From_StoreProcedure()
{
列表查询;
使用(var dbContext=new FunctionContext())
{
query=dbContext.Database.SqlQuery(“exec GetAllFunction”).ToList();
}
返回查询;
}
在web.config中添加自定义错误部分
<configuration>
<system.web>
<customErrors mode="RemoteOnly">
<error statusCode="500"
redirect="~/Error/InternalServer" />
<error statusCode="404"
redirect="~/Error/NotFound" />
</customErrors>
</system.web>
</configuration>
对于内部服务器错误,您可以显示ViewBag从控制器发送的错误消息。
因此,当您捕获和异常时,再次抛出它,但在ViewBag中设置异常消息。您可以做更多的工作来显示更友好的消息,但从错误页面或错误发生点记录错误。[1]:从Web.config中删除所有“customErrors”和“httpErrors” [2] :选中“App\u Start/FilterConfig.cs”如下所示:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
}
[3] :在“Global.asax”中添加此方法:
public void Application_Error(Object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Server.ClearError();
var routeData = new RouteData();
routeData.Values.Add("controller", "ErrorPage");
routeData.Values.Add("action", "Error");
routeData.Values.Add("exception", exception);
if (exception.GetType() == typeof(HttpException))
{
routeData.Values.Add("statusCode", ((HttpException)exception).GetHttpCode());
}
else
{
routeData.Values.Add("statusCode", 500);
}
Response.TrySkipIisCustomErrors = true;
IController controller = new ErrorPageController();
controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
Response.End();
}
[4] :添加“控制器/ErrorPageController.cs”
public class ErrorPageController : Controller
{
public ActionResult Error(int statusCode, Exception exception)
{
Response.StatusCode = statusCode;
ViewBag.StatusCode = statusCode + " Error";
return View();
}
}
[5] :在“Views/Shared/Error.cshtml”中
@model System.Web.Mvc.HandleErrorInfo
@{
ViewBag.Title = (!String.IsNullOrEmpty(ViewBag.StatusCode)) ? ViewBag.StatusCode : "500 Error";
}
<h1 class="error">@(!String.IsNullOrEmpty(ViewBag.StatusCode) ? ViewBag.StatusCode : "500 Error"):</h1>
//@Model.ActionName
//@Model.ContollerName
//@Model.Exception.Message
//@Model.Exception.StackTrace
@model System.Web.Mvc.HandleErrorInfo
@{
ViewBag.Title=(!String.IsNullOrEmpty(ViewBag.StatusCode))?ViewBag.StatusCode:“500错误”;
}
@(!String.IsNullOrEmpty(ViewBag.StatusCode)?ViewBag.StatusCode:“500错误”):
//@Model.ActionName
//@Model.ContollerName
//@Model.Exception.Message
//@Model.Exception.StackTrace
太宽,无法回答。。。可能您可以搜索“如何在ASP.NET MVC中处理错误/异常”,并建立一些理解。我可以推荐一本好的读物——这是我使用的,我认为会满足你的要求;