【问题标题】:Unauthorized AJAX request succeeds未经授权的 AJAX 请求成功
【发布时间】:2012-10-05 23:06:08
【问题描述】:

我有以下控制器方法:

[HttpPost]
[Authorize(Roles="some_role_actual_user_is_NOT_in")
public ActionResult AJAXMethod()
{
    return Json(new { message = "server message");
}

和带有脚本的页面:

function sendReq()
{
    $.ajax({
        type: "POST",
        data: { somedata: "somedata" },
        url: "/Path/To/AJAXMethod",
        success: onAJAXSuccess,
        error: onAJAXError
    });
}


function onAJAXSuccess(response, status, xhr)
{
    alert("success: " + response.message);
    alert(status);
}

function onAJAXError(xhr,status,error)
{
    alert("error: " + status);
    alert(error);
}

当我以非授权角色调用 sendReq 时,AJAX 调用仍然成功 - 回调 onAJAXSuccess 被调用,但 response.message 未定义。

【问题讨论】:

  • 这是一个预期的行为,你为什么不把错误放在控制器响应中呢?
  • 那么是不是说Authorize属性对AJAX方法没用了?
  • 当我想到它时,服务器不是以通常的登录页面响应吗?这将解释成功...
  • 您是返回 JSON 消息还是将其输出为 JSON?

标签: asp.net-mvc-3 jquery


【解决方案1】:

这是正确的行为。 AJAX 调用的success 仅取决于服务器以 200 OK 响应的事实。您需要自己查询返回的响应,以确保它是您期望的格式。

例如:

if (typeof response.message != "undefined" && response.message != "") {
   // it worked
}
else {
    // didn't work || user did not have access.
}

【讨论】:

    猜你喜欢
    • 2012-08-17
    • 1970-01-01
    • 2012-03-25
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多