【发布时间】:2013-12-20 09:31:15
【问题描述】:
我在 Microsoft Visual Studio Express 2013 for Web 中创建了一个新项目。 它是一个 ASP.NET MVC 5 - .NET Framework 4.5 项目。
我想处理(找不到资源):
我确实使用下面的代码处理了它。
如果我执行 (/Home/kddiede/ddiij) 或 (/djdied/djie/djs) 之类的操作,此代码将起作用,这将导致显示我的自定义错误页面。
但是,当我尝试执行 (/Home/kddiede/ddiij/dfd/sdfds/dsf/dsfds/fd) 之类的操作或任何不存在的长 URL 时,它会显示以下内容:
代码来自:http://www.codeproject.com/Articles/635324/Another-set-of-ASP-NET-MVC-4-tips
提示 16:自定义错误屏幕
错误页面在 /View/Shared/Error.cshtml 中
Web.config
<system.web>
<customErrors mode="RemoteOnly" />
</system.web>
全球.asax
protected void Application_EndRequest(Object sender, EventArgs e)
{
ErrorConfig.Handle(Context);
}
ErrorConfig 类
public class ErrorConfig
{
public static void Handle(HttpContext context)
{
switch (context.Response.StatusCode)
{
//Not authorized
case 401:
Show(context, 401);
break;
//Not found
case 404:
Show(context, 404);
break;
}
}
static void Show(HttpContext context, Int32 code)
{
context.Response.Clear();
var w = new HttpContextWrapper(context);
var c = new ErrorController() as IController;
var rd = new RouteData();
rd.Values["controller"] = "Error";
rd.Values["action"] = "Index";
rd.Values["id"] = code.ToString();
c.Execute(new RequestContext(w, rd));
}
}
错误控制器
internal class ErrorController : Controller
{
[HttpGet]
public ViewResult Index(Int32? id)
{
var statusCode = id.HasValue ? id.Value : 500;
var error = new HandleErrorInfo(new Exception("An exception with error " + statusCode + " occurred!"), "Error", "Index");
return View("Error", error);
}
}
我上面提到的网站的最后一段代码没有添加到 Global.asax 中,因为它已经在 FilterConfig.cs 中
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
有人知道怎么解决吗?
提前致谢。
【问题讨论】:
标签: asp.net-mvc url http-status-code-404 asp.net-routing