asp.net-mvc - MVCルーティングが失敗した場合に別のページにリダイレクトする方法

原文 asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

これは私のRouteConfig.csであり、isValidAppIdクラスにあるappidに含まれるurlを、web.configに保存した「modelApplicationId」に一致させるために使用しています。

    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
               "ApplicationRoute",
               "{appId}/{controller}/{action}/{id}",
               new { controller = "Account", action = "SignIn", id = UrlParameter.Optional },
               new {
                   isValidAppId = new isValidAppId() 
               }
           );
        }
    }

    public class isValidAppId : IRouteConstraint
    {
        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {
            var isValid = false;
            if (values["appId"] != null && WebConfigurationManager.AppSettings["ModelApplicationId"] != null)
            {
                if (values["appId"].ToString() == WebConfigurationManager.AppSettings["ModelApplicationId"].ToString())
                    return isValid = true;
            }

            // return true if this is a valid AppId
            return isValid;
        }
    }


isValidAppIdがfalseを返す場合、他のError.cshtmlページにリダイレクトします。
答え
場合、isValidAppId returns falseの場合は、throw an custom Exception / HttpExceptionを選択すると、自動的にError.cshtmlページにリダイレクトされ、カスタムエラーメッセージが表示されます。

if(!isValid) // If isValid is false
{
   throw new HttpException(404, "NotFound"); // Modify According to your custom message.
}

// return true if this is a valid AppId
return isValid;


更新:

Error.cshtmlページにリダイレクトするため。以下のコードに従ってください...

エラーコントローラを作成しました:

public class ErrorController : Controller
{
    public ActionResult Error()
    {
        return View();
    }
}


Global.asax.csに以下のコードがあります

protected void Application_Error(object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();
    Response.Clear();
    Response.Redirect("/Error/Error");
}


MVCプロジェクトの共有フォルダー内にError.Cshtmlを作成しました。

@model System.Web.Mvc.HandleErrorInfo

@{
    ViewBag.Title = "Error";
}

<hgroup class="title">
    <h1 class="error">Error.</h1>
    <h2 class="error">An error occurred while processing your request.</h2>
</hgroup>


これが役に立てば幸い...
関連記事

c# - MVCのドロップダウンから選択したアイテムを取得する方法

angularjs - RazorでAnonymousIDを取得する

asp.net-mvc - MVCでFluentBootstrap検証を行う方法

c# - Entity Frameworkを使用して2つの関連オブジェクトを異なるデータベースに保存する方法

javascript - 画像の小さいビットとしての画像[終了]

c# - MVCアプリケーションのプリコンパイル済みクラスからJSONオブジェクトをシリアル化する

c# - データベースのクラスを最初に拡張する方法ASP MVC 5

c# - MVC asp.netおよびn層アーキテクチャ[終了]

asp.net-mvc - HtmlHelpersの単語リストをエスケープするASP.NET MVC htmlAttributes

c# - ASP.NET EnumDropDownListForはDropDownを生成しますが、モデルの値を選択しません