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 将我们重定向到主页上请建议许多其他选项,我会解决这个问题
看看这个链接,这肯定会有所帮助
看看 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
}