2013-07-02 10 views
7

私はローカルで実行しているときにこれは期待通りに働いている、しかし、すぐに私は無料AzureのWebサイトに展開として、私はメッセージで401エラーコードを取得するには、次のコントローラAzure Webサイトに配備されているときにAllowAnonymousが機能しないのはなぜですか?

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

とMVC4のWebアプリを持っています: You do not have permission to view this directory or page.

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

私は同じ結果を持つSystem.Web.Mvc.AuthorizeSystem.Web.Mvc.AllowAnonymousの完全修飾クラス名を試してみました。

アプリは.NET 4.5を使用しており、Azureウェブサイトも4.5を使用するように設定されています。

UPDATE: BaseController[AllowAnonymous]で飾られていなかった部分図としてヘッダを返す作用を有します。ローカルでは、ヘッダーなしでページが表示されましたが、Azure Webサイトでは応答が途切れ、上記のエラーメッセージとともに返されます。私は意図的にそれを調べるまでヘッダが欠落していたことを認識していなかった。

質問が返されます。なぜAzure Websitesが応答を無効にするのですか?

+2

更新プログラムを回答として投稿する必要があります。 – Kyle

答えて

4

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

質問が返されます。なぜAzure Websitesが応答を無効にするのですか?

+0

これは私を助けました。レイアウトなどの部分的なビューを含める場合は、[AllowAnonymous]とマークする必要があります。 – Ant

2

私はまったく同じ問題を抱えていました.Jonasのアップデートによれば、部分ビューを返し、[Authorize]属性を持つアクションを調べる必要があります。

[Authorize]属性を削除し、適切にレンダリングするためにユーザーを認証する必要がある場合は、コードで権限のないケースを処理してください。

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

1

あなたは

<authorization> 
    <deny users="?" /> 
</authorization> 

そのオーバーライド[のAllowAnonymous]

は、web.configファイルのセクションに追加している場合、あなたのweb.configファイルをチェックしてください:

<location path="YourController/AnonymousMethod"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 

AnonymousMethod

の匿名アクセスを許可するようにします
関連する問題