ASP.NET MVC 5 - (ошибка HTTP 404.0-не найдена) с длинным несуществующим URL
Я создал новый проект в Microsoft Visual Studio Express 2013 для Интернета. Это 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>
глобальные.асакс
protected void Application_EndRequest(Object sender, EventArgs e)
{
ErrorConfig.Handle(Context);
}
ErrorConfig Класс!--6-->
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));
}
}
ErrorController
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());
}
кто-нибудь знает как это исправить?
спасибо заранее.
2 ответов
решена. Чтобы указать все несуществующие URL-адреса на страницу ошибки, выполните следующие действия:
-
добавьте код ниже в конце вашего RouteConfig.cs файл:
public static void RegisterRoutes(RouteCollection routes) { // Default routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); // Add this code to handle non-existing urls routes.MapRoute( name: "404-PageNotFound", // This will handle any non-existing urls url: "{*url}", // "Shared" is the name of your error controller, and "Error" is the action/page // that handles all your custom errors defaults: new { controller = "Shared", action = "Error" } ); }
-
добавьте код ниже в свой веб-сайт.конфигурационный файл:
<configuration> <system.webServer> <modules runAllManagedModulesForAllRequests="true"></modules> </system.webServer> <system.web> <httpRuntime relaxedUrlToFileSystemMapping="true" /> </system.web> </configuration>
Это должно указывать на все несуществующие URL-адреса,такие как (/ad/asd/sa/das,d/asd, asd.asd + dpwd ' =12=2e-21) на вашу страницу ошибок.
другим подходом было бы добавить это в вашу сеть.config внутри system.web
элемент
<system.web>
<!-- ... -->
<!--Handle application exceptions-->
<customErrors mode="On">
<!--Avoid YSOD on 404/403 errors like this because [HandleErrors] does not catch them-->
<error statusCode="404" redirect="Error/Index" />
<error statusCode="403" redirect="Error/Index" />
</customErrors>
</system.web>