2012-03-22 12 views
3

Authorize属性で使用するとJsonResultを返すMVC 3メソッドで奇妙な動作が見られます。私がログインしていないときにAuthorizeが正しく評価されているが、ログオンフォームにリダイレクトするのではなく、Jsonレスポンスがログオンフォームであると思われる。値を返さないように指示する追加属性がありますが、代わりにユーザーが適切なreturnUrl値を使用してログオンフォームにリダイレクトしますか?私がデモとして行ったのは、新しいMVC3サイトをセットアップし、aspnet_regsql.exeコマンドを使用してAspNetMembershipを自分のDBに追加することでした。すべてがセットアップされ、正しくログインしています。 JsonResultの動作が正しくないと思われ、正しく動作させるために属性を見逃してしまったと思っています。どのような助けも大変ありがとうございます。[Authorize]属性がLogonになっていても表示されないMVC JsonResult

ここにアカウントコントローラがあります(この質問の一部ではない投稿アクションは除外されています)。ここで

public class AccountController : Controller 
{ 
    public ActionResult LogOn() 
    { 
     return View(); 
    } 

    [Authorize] 
    public JsonResult AuthorizedAction() 
    { 
     return Json("Only returns if I am authorized"); 
    } 
} 

は、HTMLマークアップです:

<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#btnTest").click(function() { 
      $.ajax({ 
       type: "POST", 
       url: "Account/AuthorizedAction", 
       data: {}, 
       success: function (result) { 
        $("#testMe").html(result); 
       }, 
       error: function (result) { 
        $("#testMe").html('Something broke in the ajax request'); 
       } 
      });    
     }); 
    }); 
</script> 

<input type="button" id="btnTest" value="Test me" /> 
<div id="testMe">I have initial text</div> 

結果:

1)私は私のテストのdiv 2で '私は権限を持っている場合にのみ返し' を取得ログイン)ログに記録されず、ログオン()メソッドにブレークポイントがあります。この値が表示されます。 リクエスト["returnUrl"] "/ Account/AuthorizedAction"

テスト部門にはログオンフォームが表示されています:)これは私がこれを正しく処理していないようです。

答えて

3

Phil Haack氏は、認証されていないリソースへのリクエストが行われたことを検出し、それに応じて401 HTTPステータスコードを傍受することができる非常に優れたテクニックについて説明しているfollowing blog postをご覧ください。

+0

ありがとうございました。 – likestoski

1

代わりに部分的なビューを返すようにしてください。

関連する問題