C# 如何在ASP.NETMVC中处理异常和自定义错误页面

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

我正在学习ASP.NET MVC中的异常处理,我试图实现的是单个自定义错误页面,该页面显示带有异常详细信息的错误,当然,这些信息可能会因生成位置的不同而有所不同。我不确定是否在正确的轨道上开始! 但是,我有读取SQL存储过程和返回值的C#代码,我想添加代码级异常处理,即try、catch和finally,但希望在自定义错误页面上显示错误。我怎样才能做到这一点

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中处理错误/异常”,并建立一些理解。我可以推荐一本好的读物——这是我使用的,我认为会满足你的要求;