2

Webプロジェクトに必要なすべての認証タスクを実行するための領域を追加しました。プロジェクト内のフォルダ構造は次のとおりです。AccountControllerフォームLoginUrl - これをフォーマットするには、どのように領域を扱うのですか?

- Solution 
    - Web Project 
    - Areas 
     - Accounts 
     - Controllers 
      AccountController.cs 

は通常LogOn(LogOnModel model, string returnUrl)アクションです。 AccountsAreaRegistration.cs

は、自動生成されたルートです:

context.MapRoute(
    "Accounts_default", 
    "Accounts/{controller}/{action}/{id}", 
    new { 
     action = "LogOn", 
     id= UrlParameter.Optional 
    } 
); 

私に起こった最初のものは、単にweb.configファイル内loginUrl属性に地域の名前を追加し、できるようにしましたルートマッピングリダイレクトの世話をする - 非常に簡単、私は考えた:

<forms loginUrl="~/Accounts/Account/LogOn" 
     timeout="2880" /> 

唯一の問題は、それが動作しないということです。 「Accounts/Account/Logon」が見つからないというエラーが表示されたり、loginUrl属性に設定した値が何であれ、Web.Configで指定したURLがその値をマッチを探すために、ルートテーブル

*注記:このすべてが私の他のコントローラのいずれかで、アクションの[オーソライズ]属性によってトリガされている

EDIT

回避策。私は、デフォルト( "Account/Logon")としてURLを残し、要求を正しい領域にリダイレクトするためにglobal.asaxに別のルートを追加することを発見しました:

これはジョブを完了しますが、問題に最適な解決策であるかどうかはわかりません。

答えて

0

私が発見した問題を回避するには、デフォルト(「アカウント/ログオン」)としてURLを残して、右側のエリアに要求をリダイレクトするためのGlobal.asaxに別のルートを追加することです:

routes.MapRoute("LogOn", 
      "Account/LogOn/{id}", 
      new { controller = "Account", 
        action = "LogOn", 
        id = UrlParameter.Optional} 
).DataTokens.Add("area", "Accounts"); 

この仕事を終わらせますが、それが問題の最良の解決策かどうかはわかりません。

0

テストするコントローラのアクションに[Authorize]属性がタグ付けされていますか?

承認された操作を要求した後で、一部の操作の承認またはログオン操作へのルーティングはどちらですか?

+0

は、私はあなたがに呼び出していない、あなたのglobal.asax.csの状況より良い –

+0

@ScottSEA を説明するために私の質問を編集した: AreaRegistration.RegisterAllAreasを(); ([リンク] http://msdn.microsoft.com/en-us/library/system.web.mvc.arearegistration.aspx) –

関連する問題