7

次のコントローラーを備えたMVC4 Webアプリがあります

[Authorize]
public class AccountController : BaseController
{
  [AllowAnonymous]
  public ActionResult SignInRegister(LoginModel loginModel, string returnUrl)
  {
    //some implementation
  }
  //other secured actions
}

これは、ローカルで実行すると期待どおりに機能しますが、無料の Azure Web サイトにデプロイするとすぐに、次401のメッセージを含むエラー コードが表示されます。You do not have permission to view this directory or page.

属性を削除して[Authorize]再デプロイすると期待どおりに機能し、再度追加して再デプロイすると問題が再発します。

完全修飾クラス名を試してみましたSystem.Web.Mvc.AuthorizeSystem.Web.Mvc.AllowAnonymous、同じ結果が得られました。

アプリは .NET 4.5 を使用しており、Azure Web サイトも 4.5 を使用するように構成されています。

更新:BaseController装飾されていない部分ビューとしてヘッダーを返すアクションがあります[AllowAnonymous]。ローカルではヘッダーなしでページが表示されましたが、Azure Web サイトでは応答が途切れ、上記のエラー メッセージのみが返されました。意図的に調べるまで、ヘッダーが欠落していることに気づきませんでした。

なぜ Azure Web サイトが応答を上書きするのでしょうか?

4

3 に答える 3

4

BaseController には、[AllowAnonymous] で装飾されていない部分ビューとしてヘッダーを返すアクションがあります。ローカルではヘッダーなしでページが表示されましたが、Azure Websites では応答が途切れ、上記のエラー メッセージのみが返されました。意図的に調べるまで、ヘッダーが欠落していることに気づきませんでした。

なぜ Azure Web サイトが応答を上書きするのでしょうか?

于 2015-08-07T15:19:40.853 に答える
2

私はまったく同じ問題を抱えていました.Jonasの更新が言うように、部分ビューを返し、[Authorize]属性を持つアクションに注意する必要があります。

[Authorize] 属性を削除してから、適切にレンダリングするためにアクションでユーザーを認証する必要がある場合は、コードで無許可のケースを処理する必要があります。

例として、現在ログインしているユーザーの名前が Partial を介してページに表示される場合があります。現在ログインしているユーザーが利用できない場合は、アクションに空の文字列などを表示させます。

于 2014-05-21T10:30:42.643 に答える