404 重定向疑难解答

本文关键字:疑难解答 重定向 | 更新日期: 2023-09-27 18:34:47

我有现有的MVC Web应用程序网址物理上不存在(即MyMVCSite/mypage.aspx。 如果用户输入无效的 aspx,我需要重定向"错误页面"上的页面,这在页面条件下不起作用.aspx但当无效操作进入其工作时

-( MVCSite/

InvalidePage --> 重定向至错误页面 MVCSite/error

-( 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>
目前错误页面

仅在操作名称错误时发生,但如果页面名称错误,它会使用错误的 url 将我们重定向到主页上请建议许多其他选项,我会解决这个问题

404 重定向疑难解答

看看这个链接,这肯定会有所帮助

看看 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,因此您将为所有这些命中创建一个会话对象。对于频繁使用的系统来说,这可能是一个问题(性能(。

全球ASAX解决方案来源

您当前已关闭"自定义错误",这应该打开。

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

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

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