1

Asp.net Mvc プロジェクトの場合、ユーザー (この Web サイトの管理者である必要があります) が初めてこの Web サイトにアクセスしたときに、すべての要求を構成ページにリダイレクトする必要があります。この操作は、デフォルトのログイン ページと同様です (アクセスが拒否された場合、すべての要求はデフォルトのログイン ページにリダイレクトされます)。

ユーザーが構成ファイルを構成した後、ルート テーブルは通常のコントローラーにマップされます。

Ps。このページは、管理者がエラー構成を検出し、展開を容易にするのに役立ちます。

更新 #1 Codeplex でASP.NET MVC WebFormRouting Demo を使用しようとしています。しかし、ユーザーが「~/AccessDenied.aspx」や「~/web.config」などの既存のページにアクセスすると、リダイレクトできません。

routes.MapWebFormRoute("RedirectToConfig", "{*anything}", "~/App_Config");

ありがとう、

4

3 に答える 3

2

あなたの説明から、これは承認の問題のように見えるので、カスタム Authorize 属性クラス (AuthorizeAttribute から継承) をお勧めします。

ここから、OnAuthorization メソッドをオーバーライドして、ユーザーが必要な構成手順を完了したかどうかを確認し、それに応じて filterContext.Result を設定できます。基本的な実装は次のようになります (これは、有効な /Account/Configure ルートがあることを前提としています)。

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        base.OnAuthorization(filterContext);

        var user = ; // get your user object

        if(user.IsConfigured == false)  // example
        {
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary
                    {
                        {
                            "ConfigureUserRoute",
                            filterContext.RouteData.Values["ConfigureUserRoute"]
                        },
                        {"controller", "Account"},
                        {"action", "Configure"}
                    });
           return;
        }
    }
}

カスタム AuthorizeAttribute クラスを作成する方法の他の例については、StackOverflow を参照してください。

于 2009-06-17T06:06:43.647 に答える
1

2 つのアイデア:

  • ルーティング テーブルの上にキャッチオール ルールを使用し、構成ステータスをチェックする制約を設定します。
  • このチェックのコードを GlobalAsax の Application_BeginRequest に入れます

キャッチオール アイデアの詳細:

  • URL「{*path}」でルールを作成し、リストの最初に配置します
  • 構成がまだ完了していない場合にのみ、このルールをアクティブにする制約を作成します
  • シンプルなコントローラを作成します。RedirectToUrl("config.aspx")

しかし、Application_BeginRequest のソリューションは、コード全体が 1 か所でこれを処理するため、より単純になります。

于 2009-06-16T06:49:27.387 に答える
0

これで、別の質問の手法を適用して、この問題を解決できます。アプリケーションの起動時に静的インスタンスに値を保持する。次のコードを見てください。

部分的なConfigBootstapper.cs

public class ConfigBootstapper
{
    public static EnableRedirectToConfigManager = false;
}

部分的なConfigModule.cs

void HttpApplication_BeginRequest(object sender, EventArgs e)
{
    HttpApplication app = sender as HttpApplication;

    if (ConfigBootstapper.EnableRedirectToConfigManager)
    {
        app.Response.Redirect("~/App_Config");
    }
}

部分的なGlobal.asax

protected void Application_Start()
{
    [logic for setting ConfigBootstapper.EnableRedirectToConfigManager value]
}

PS。リダイレクトする前に、無限ループを引き起こすいくつかの条件を確認することを忘れないでください。

于 2009-06-18T10:01:35.540 に答える