0

这一定很简单并且已经回答了,但是我已经浪费了很多时间。我不知道如何在错误输入的地址上获取错误页面。此外,我不希望重定向,而是保留 URL。我尝试了许多 CustomErrors、HttpErrors 和 Application_Error 的组合,但对于不存在的控制器没有任何作用——取决于 HttpErrors,我总是得到 IIS 404.0 页面或只是一个空的 404 响应。在 IIS 7.5、MVC 3 上运行。

4

2 回答 2

0

我使用以下路由来确保所有不匹配任何其他路由的请求都落在那里,然后您可以很容易地处理这种情况:

        // this route is intended to catch 404 Not Found errors instead of bubbling them all the way up to IIS.
        routes.MapRoute(
            "PageNotFound",
            "{*catchall}",
            new { controller = "Error", action = "NotFound" }
        );

映射最后一个(在任何其他语句之后包括该.MapRoute语句)。

于 2012-04-07T03:17:22.390 回答
0

我不记得我在哪里得到了解决方案。但这里是处理错误的代码: 首先,创建一个 ErrorController:

public class ErrorController : Controller
{
    //
    // GET: /Error/
    public ActionResult Index()
    {
        return RedirectToAction("Index", "Home");
    }

    public ActionResult Generic()
    {
        Exception ex = null;
        try
        {
            ex = (Exception)HttpContext.Application[Request.UserHostAddress.ToString()];
        }
        catch { }

        return View();
    }

    public ActionResult Error404()
    {            
        return View();
    }
}

其次,打开全局文件并添加以下代码:

protected void Application_Error(object sender, EventArgs e)
{
     Exception ex = Server.GetLastError();
     Application[HttpContext.Current.Request.UserHostAddress.ToString()] = ex;
}

第三,更改 webconfig 中的 customerror:

<customErrors mode="Off" defaultRedirect="/Error/Generic">
  <error statusCode="404" redirect="/Error/Error404"/>
</customErrors>

更多:我又创建了一个错误布局。它使事情更加清楚。:)

希望这对您有所帮助。

于 2012-04-08T02:43:04.433 回答