2009-08-25 16 views
11

私はASP.NET MVCプロジェクトを持っています。ウェブサイトのさまざまな領域に対して異なるLoginUrlを使用したいと思います。サイトの領域に応じて、さまざまな種類の資格情報が入力されます。ASP.NET MVCとフォーム認証で異なるURLのLoginUrlが異なる

http://host.com/widget/homeは、http://host.com/widget/logonにリダイレクトする必要があります。

http://host.com/admin/homeは、http://host.com/admin/logonにリダイレクトする必要があります。

これまでのところ、私が出ている最善の解決策は、web.configファイル内のフォーム認証loginUrl =「〜/アカウント/ログオン」を持つことである:

:アカウントのコントローラで

<authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogOn" timeout="2880"/> 
    </authentication> 

public ActionResult LogOn() 
{ 
    //redirect depending on the returnUrl? 
    string returnUrl = ControllerContext.Controller.ValueProvider["ReturnUrl"].AttemptedValue; 
    if (returnUrl.StartsWith("/widget")) 
    { 
     return Redirect(string.Format("/widget/Logon?ReturnUrl={0}", returnUrl)); 
    } 
    if (returnUrl.StartsWith("/admin")) 
    { 
     return Redirect(string.Format("/admin/Logon?ReturnUrl={0}", returnUrl)); 
    } 
    return View(); 
} 

これを行うより良い方法はありますか?

+1

ところで、単にメソッドの文字列パラメータとしてreturnUrlを指定することができます:LogOn(string returnUrl) –

答えて

1

ウェブサイトのサブフォルダに別々のweb.configファイルを置くことができるので、管理者/フォルダ内の実際の.aspxページとそのフォルダ内のweb.configがある場合は、そのフォルダ内の認証URLを個別に指定します。

おそらくそれらのサブフォルダに物理ファイルを持っていないので、それがASP.NET MVCルートで動作するかどうかわかりませんが、試してみる価値があります。

+2

MVCエリアでは別のweb.configがありますが、認証属性:アプリケーションレベルを超えてallowDefinition = 'MachineToApplication'として登録されたセクションを使用するとエラーになります。このエラーは、仮想ディレクトリがIISのアプリケーションとして構成されていないために発生します。 – Jafin

1

アクションに認証属性を追加します。

次に、global.asaxにApplication_AuthenticateRequestを追加し、送信者を確認し、アクションのログイン先をリダイレクトします。

+0

私はちょうど興味がありますが、これは私が元々行っていたものと似ているようですが、別の場所にあります。 このようにする利点は何ですか? – mlsteeves

関連する問題