2012-03-22 84 views
3

我看到MVC 3方法返回一个JsonResult与Authorize属性一起使用时的奇怪行为。看起来会发生的情况是,当我没有登录但授权是正确评估的,而不是重定向到登录表单时,Json响应是登录表单。是否有一个附加属性指示响应不返回值,而是将用户重定向到登录表单,优先使用正确的returnUrl值?我做的一个演示是建立一个新的MVC3站点,并使用aspnet_regsql.exe命令将AspNetMembership添加到我的数据库。所有设置和正确登录我。 JsonResult的行为看起来不正确,我希望我错过了一个属性以使其正常工作。任何帮助非常感谢,事先感谢。MVC JsonResult与[Authorize]属性去登录但不显示视图

这里是帐户控制器(不包括Post问题)。

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 '只有当我被授权返回')当没有登录,我在我的Logon()方法中有一个断点我看到这个值 请求[“returnUrl”] “/ Account/AuthorizedAction”

我有测试div显示登录窗体:)这看起来像我只是没有正确处理。

回答

3

您可以看看following blog post,其中Phil Haack解释了一种非常好的技术,允许您检测对未经身份验证的资源的请求,并通过拦截401 HTTP状态代码进行相应操作。

+0

感谢Darin,非常有帮助。 – likestoski 2012-03-22 18:08:58

1

尝试并返回部分视图

相关问题