Asp.net-Mvc

ASP.NET MVC 5 - (HTTP 錯誤 404.0 - 未找到)具有長的不存在的 URL

  • December 6, 2014

我在 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 錯誤 404.0 - 未找到

程式碼來自: http: //www.codeproject.com/Articles/635324/Another-set-of-ASP-NET-MVC-4-tips

技巧 16:自定義錯誤螢幕

錯誤頁面位於 /View/Shared/Error.cshtml

網頁配置

<system.web>
<customErrors mode="RemoteOnly" />
</system.web>

全球.asax

protected void Application_EndRequest(Object sender, EventArgs e)
{
   ErrorConfig.Handle(Context);
}

錯誤配置類

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());
}

任何人都知道如何解決它?

提前致謝。

解決了。要將所有不存在的 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" }
   );
}
  • 將以下程式碼添加到您的 Web.config 文件中:
<configuration>
   <system.webServer>
      <modules runAllManagedModulesForAllRequests="true"></modules>
   </system.webServer>

   <system.web>
      <httpRuntime relaxedUrlToFileSystemMapping="true" />
   </system.web>
</configuration>

這應該將所有不存在的網址(例如 (/ad/asd/sa/das,d/asd,asd.asd+dpwd’=12=2e-21) )指向您的錯誤頁面。

引用自:https://stackoverflow.com/questions/20366170