0

我在以下帖子中指的是达林的回答。

我正在使用 MVC3,我想知道这是否仍然是一种处理错误的方法?

在 rrror 控制器中,他具有以下内容:

public ActionResult Http404()
{
     Response.StatusCode = 404;

     return Content("404", "text/plain");
}

使用他的代码.. 我希望它显示完整的 URL,我该怎么做?所以它需要,www.mywebsite.com/Error/Http404而不仅仅是www.mywebsite.com. 我该怎么做?我认为如果我有以下代码,那么它将显示完整的 URL,但它仍然只显示 www.mywebsite.com:

public ActionResult Http404()
{
     Response.StatusCode = 404;

     return View("Http404");
}

如何获得在 global.asax.cs 中设置的 ex 值以显示在此页面上?

我不再在 web.config 中处理我的错误,因为它一直在查询字符串中有一个 aspxerrorpath。

4

2 回答 2

0

你试过了吗:http: //community.codesmithtools.com/CodeSmith_Community/b/tdupont/archive/2011/03/01/error-handling-and-customerrors-and-mvc3-oh-my.aspx

此示例不会重定向到错误页面,但会继续显示发生错误的请求的 url。我希望它会帮助你。

于 2012-04-23T08:54:32.193 回答
0

因此,根据我的理解,您希望将用户重定向到有关异常的特定错误页面,以及您希望访问异常的错误页面。

这是我尝试过的,创建了一个基本控制器并覆盖了该OnException方法。在OnException方法内部,我正在做您在Global.asax.cs.

最重要的是,在处理异常之后,我RedirectActionResult.ExceptionContext

为了Exception从错误视图中访问,我将异常存储在TempData. 从ErrorController我将异常作为HandleErrorInfo实例传递给视图。

这是完整的代码。

// BaseController
public class BaseController : Controller
{
  protected override void OnException(ExceptionContext filterContext)
  {
    if (!filterContext.ExceptionHandled)
    {
      var action = "General";

      if (filterContext.Exception is HttpException)
      {
        var httpException = filterContext.Exception as HttpException;

        switch (httpException.GetHttpCode())
        {
          case 404:
            // page not found
            action = "Error404";
            break;
          case 500:
            // server error
            action = "Error500";
            break;
          default:
            action = "General";
            break;
        }
      }

      filterContext.Result = RedirectToAction(action, "error");
      TempData["error"] = new HandleErrorInfo(filterContext.Exception, 
                          RouteData.Values["controller"].ToString(), 
                          RouteData.Values["action"].ToString());
      filterContext.ExceptionHandled = true;
    }
  }
}

// Error Controller
public class ErrorController : Controller
{
  public ActionResult Error404()
  {
    return View(TempData["error"] as HandleErrorInfo);      
  }

  // other methods
}

// Sample controller derives from BaseController.
public class HomeController : BaseController
{
  public ActionResult Index()
  {
    return View();
  }

  public ActionResult NotFound()
  {
    throw new HttpException(404, "Not Found");
  }
}

// Error404.cshtml
@model System.Web.Mvc.HandleErrorInfo
@{
  ViewBag.Title = "404 Not Found";
}
<h2>@ViewBag.Title</h2>

<p>
  Last Exception: @Model.Exception
</p>

更新:这种方法的一个缺点是我们可以处理 HTTP 异常 404、500 或其他任何情况,如果它仅从控制器操作中抛出。

于 2012-04-23T12:36:22.013 回答