404重定向故障排除

时间:2013-10-11 05:26:31

标签: c# asp.net-mvc asp.net-mvc-3

我有现有的MVC Web应用程序URL实际上不存在(即MyMVCSite / mypage.aspx。如果用户输入无效的aspx,我需要在“错误页面”上重定向页面,这不适用于.aspx页面条件但是当无效操作时进入它的工作

- ) MVCSite / InvalidePage - >重定向到错误页面MVCSite /错误

- ) MVCSite / InvalidePage.aspx - >重定向到主页为页面MVCSite / InvalidePage.aspx

我需要最后一个条件也重定向到页面MVCSite /错误 所以这个条件也是由我尝试的,因为URL本身不存在,它也不能在这里工作......

protected void Application_BeginRequest(object sender, EventArgs e)
{ 
    if (sUrl.EndsWith(".aspx"))
    { 
        string[] path = sUrl.Split('/');
        if (!System.IO.File.Exists(Server.MapPath("test.aspx")))
        Response.Redirect("error");
    } 
}

此外我无法在Global.asax中的Application_Error事件中应用404异常,此异常多次发生,因此还有一个404的检查 - 由于某些未知原因,文件不存在可能是某些图像,css文件没有找到目前很难找到的

protected void Application_Error()
{
    if (objException.Message != "File does not exist.") { //..... } 
}

我也在Web.config中应用自定义错误,这也无法正常工作

<customErrors mode="Off">
    <error statusCode="404" redirect="Error/Index" />
</customErrors>

目前错误页面仅在操作名称错误时发生,但如果页面名称错误,则会在主页上重定向我们错误的网址 请使用我将解决此问题的任何其他选项建议

2 个答案:

答案 0 :(得分:2)

看一下这个链接,这肯定有帮助

查看http://devstuffs.wordpress.com/2010/12/12/how-to-use-customerrors-in-asp-net-mvc-2/

url说mvc-2但是所有版本都类似

也是这个

<强> http://msdn.microsoft.com/en-us/library/system.web.mvc.handleerrorattribute.aspx

用于处理Global.asax文件

您可以直接重定向到控制器/操作并通过查询字符串传递信息,而不是为此创建新路由。例如:

protected void Application_Error(object sender, EventArgs e) {
  Exception exception = Server.GetLastError();
  Response.Clear();

  HttpException httpException = exception as HttpException;

  if (httpException != null) {
    string action;

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

      // clear error on server
      Server.ClearError();

      Response.Redirect(String.Format("~/Error/{0}/?message={1}", action, exception.Message));
    }

然后您的控制器将收到您想要的任何内容:

// GET: /Error/HttpError404
public ActionResult HttpError404(string message) {
   return View("SomeView", message);
}

您的方法存在一些权衡。在这种错误处理中循环非常小心。另外一点是,由于您要通过asp.net管道来处理404,因此您将为所有这些命中创建一个会话对象。对于频繁使用的系统,这可能是一个问题(性能)。

GlobalASAX solution Source

答案 1 :(得分:0)

您当前关闭了'customErrors',应该打开它。

<customErrors mode="Off">
  <error statusCode="404" redirect="Error/Index" />
</customErrors>

另一种重定向方法是检查控制器代码中的响应是否不等于null,例如:

if (userId == null)
{
  return RedirectToAction("Error404", "Error");
}
else
{
  //Process the request
}