我有现有的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>
目前错误页面仅在操作名称错误时发生,但如果页面名称错误,则会在主页上重定向我们错误的网址 请使用我将解决此问题的任何其他选项建议
答案 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,因此您将为所有这些命中创建一个会话对象。对于频繁使用的系统,这可能是一个问题(性能)。
答案 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
}