gpt4 book ai didi

asp.net-mvc - Controller JsonResult 方法总是返回状态码 200 (OK)

转载 作者:行者123 更新时间:2023-12-02 08:21:53 27 4
gpt4 key购买 nike

我有这样一个代码块:

public class AccountController : Controller
{
[HttpPost]
public JsonResult Check(LoginModel model){
...
Response.StatusCode = (int)HttpStatusCode.Unauthorized;
return Json( new { ErrorMessage = "..." } );
}
}

这个逻辑我要将状态码401回传给客户端。

在我的前端,我使用 jquery ajax 方法来调用这个方法。

$.ajax({
...
success: function(data, textStatus, xhr){
...
},
error: function(xhr, textStatus, error){
...
}
});

但是,永远无法到达错误回调。

我用postman调试了一下,发现不管怎样总是收到200(OK)。

你们知道这里发生了什么吗?

最佳答案

遗憾的是,这是默认行为。每当您获得未经授权的访问 (401) 时,MVC 就会启动并将您重定向到登录页面,您的 200(OK) 来自该页面,这就是为什么您永远不会得到您想要的响应 - 401。为了能够返回 401 代码,您必须像这样显式抑制响应的身份验证重定向:

HttpContext.Response.SuppressFormsAuthenticationRedirect = true;

所以你得到的是:

public class AccountController : Controller
{
[HttpPost]
public JsonResult Check(LoginModel model)
{
...
Response.StatusCode = (int)HttpStatusCode.Unauthorized;
Response.SuppressFormsAuthenticationRedirect = true;
return Json( new { ErrorMessage = "..." } );
}
}

关于asp.net-mvc - Controller JsonResult 方法总是返回状态码 200 (OK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36473501/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com