Microsoft Visual Studio Express 2013 forWebで新しいプロジェクトを作成しました。これは、ASP.NET MVC 5-.NET Framework4.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>
Global.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));
}
}
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);
}
}
上記のWebサイトのこの最後のコードは、すでにFilterConfig.csにあるため、Global.asaxには追加されませんでした。
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)などの存在しないすべてのURLがエラーページを指すようになります。
別のアプローチは、これをsystem.web
要素内のweb.configに追加することです。
<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>