首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ASP.NET MVC中,在我的视图中显示未处理异常的最佳方式是什么?

在ASP.NET MVC中,在我的视图中显示未处理异常的最佳方式是什么?
EN

Stack Overflow用户
提问于 2013-05-01 12:06:09
回答 1查看 16.3K关注 0票数 18

我的web.config中有以下内容:

代码语言:javascript
复制
 <customErrors mode="On" defaultRedirect="Error">
  <error statusCode="404" redirect="Error/NotFound" />
</customErrors>

我有一个

代码语言:javascript
复制
 [HandleError]

在我的HomeController类的顶端。为了测试,我创建了一个简单抛出异常的操作。。它会重定向到我的

代码语言:javascript
复制
 ErrorController/Index

方法,但是当它到达绑定到HandleErrorInfo的视图时,我的模型为空,因此不知何故我丢失了对错误的引用。

我确信这与在重定向中丢失的错误有关,所以我想看看我是否遗漏了什么,以及是否有人有建议,我可以有一个显示Stacktrace和错误消息的视图。

EN

回答 1

Stack Overflow用户

发布于 2013-05-08 20:20:41

我已经用这小段代码向用户展示了已处理的错误页面。是否找不到页面或发生了某些其他错误。

代码语言:javascript
复制
    void Application_Error(object sender, EventArgs e)
    {
        // this value can be fetched from config or depend on DEBUG smybol
        if (!handleErrors)
            return;

        var error = Server.GetLastError();
        var code = (error is HttpException) ? (error as HttpException).GetHttpCode() : 500;

        if (code == 404)
        {
            // do something if page was not found. log for instance
        }
        else
        {
            // collect request info and log exception
        }

        // pass exception to ErrorsController
        Request.RequestContext.RouteData.Values["ex"] = error;

        // execute controller action
        IController errorController = new ErrorsController();
        errorController.Execute(new RequestContext(new HttpContextWrapper(Context), Request.RequestContext.RouteData));
    }

errors控制器看起来像这样。如果您需要详细的异常信息,可以通过RouteData访问

代码语言:javascript
复制
public class ErrorsController : Controller
{
    /// <summary>
    /// Page not found
    /// </summary>
    /// <returns></returns>
    public ActionResult Http404()
    {
        return View();
    }

    /// <summary>
    /// All other errors
    /// </summary>
    /// <param name="actionName"></param>
    protected override void HandleUnknownAction(string actionName)
    {
        // in case detailed exception is required.
        var ex = (Exception) RouteData.Values["ex"];
        return View();
    }
}

您可以为每个http代码添加不同的视图。只需实现操作Http{Code}

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16312588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档