当我重定向到控制器中的非现有功能时,我得到空白页面。 它不是404错误!
例如我有这个控制器:
public class AccountController
{
public ActionResult Index()
{
return view();
}
}
现在,例如,我将转到此网址: http://localhost:2993/Account/sdfjhsdkfjhsdf
我会得到一个空白页。
我的问题是,有没有办法抓住它?
谢谢
答案 0 :(得分:0)
是的,您可以在404
中抓住global.asax
。处理Application_Error
,如下所示 -
public void Application_Error(Object sender, EventArgs e)
{
var exception = Server.GetLastError();
Server.ClearError();
var routeData = new RouteData();
routeData.Values.Add("area", "");
routeData.Values.Add("controller", "Error");
if (exception.GetType() == typeof(HttpException))
{
var code = ((HttpException)exception).GetHttpCode();
if (code == 404)
{
routeData.Values.Add("action", "Index");
}
}
else
{
routeData.Values.Add("action", "Index");
routeData.Values.Add("statusCode", 500);
}
routeData.Values.Add("exception", exception);
Response.TrySkipIisCustomErrors = true;
IController controller = new ErrorController();
controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
Response.End();
}
并将ErrorController
定义如下。您可以在此处使用不同的Action
方法来处理404,401等不同的错误。
public class ErrorController : Controller
{
public ActionResult Index()
{
return View();
}
}
答案 1 :(得分:0)
或者您可以在请求结束时捕获此代码我如何处理它。
protected void Application_EndRequest(object sender, System.EventArgs e)
{
switch (Response.StatusCode)
{
case 404:
Response.ClearContent();
Response.RedirectToRoute("Default", new RouteValueDictionary() { { "controller", "error" }, { "action", "Index" }, { "statuscode", Response.StatusCode } });
break;
}
}
添加一个名为ErrorController的新控制器
ErrorController.cs
public class ErrorController : Controller
{
// GET: Error
public ActionResult Index()
{
return View();
}
}
错误/ Index.cshtml
<h2>bad request</h2>