【发布时间】:2017-05-24 04:19:10
【问题描述】:
使用 ASP.NET MVC 5,我想为不同的场景返回适当的 HTTP 状态代码(401 表示用户未通过身份验证,403 表示用户无权访问某些资源等),然后在 jQuery 中处理它们。
但问题是,当我尝试返回 401 时,它总是返回“200:OK”。 MVC 5 RC1 给出的是“302: Found”而不是 401,所以我可以使用解决方法 (HttpStatusCodeResult(401) returns "302 Found")。 但现在我从 MVC 5 RC1 迁移到 MVC 5,这种行为发生了变化。现在它总是“200:OK”。所以我的解决方法是没用的,当然我不能用其他任何东西替换 200。
public ActionResult My()
{
if (User.Identity.IsAuthenticated == false)
{
return new HttpStatusCodeResult(401, "User is not authenticated.");
// Returns "200: OK"
}
// ... other code ...
}
如何解决?
【问题讨论】:
-
向我们展示一些您使用 401 的示例代码,以便我们为您提供帮助。没有代码 == 没有帮助。
-
你不应该明确地检查
User.Identity.IsAuthenticated。 ASP.NET MVC 中的身份验证通常使用属性完成;您应该将 Authorize 属性应用于您的方法。 -
你怎么知道它返回 200?你在使用提琴手或类似的东西吗?我在机器上的 VS2013 中创建了一个新的 MVC 5 项目,将
return new HttpStatusCodeResult(401, "User is not authenticated.");粘贴到一个动作中,我在提琴手中看到了 302,正如我所期望的那样。你有不同的结果吗? -
我也有同样的问题,没有找到任何解决方案。我返回新的 HttpUnauthorizedResult();从 HandleUnauthorizedRequest 方法和浏览器提琴手它接收它作为 200 OK。我知道上周这对我有用,我本周做了完整的 Windows 7 更新,但这对我停止了工作。
-
您使用的是什么 OWIN 中间件(如果有)?身份验证中间件拦截 401 并重写对质询的响应是很常见的。我怀疑这种重写是您问题的根本原因。
标签: c# asp.net asp.net-mvc http-status-codes asp.net-mvc-5