加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – HttpStatusCodeResult(401)返回“302 Found”

发布时间:2020-12-15 06:51:03 所属栏目:百科 来源:网络整理
导读:使用ASP.NET MVC 5,我想为不同的场景返回适当的HTTP状态代码(401用于用户未通过身份验证,403当用户对某些资源没有权限时)等等,而不是在jQuery中处理它们. 但问题是,当我尝试返回401时,它总是返回“302:Found”.什么是自定义状态代码的窍门,为什么这不起作用
使用ASP.NET MVC 5,我想为不同的场景返回适当的HTTP状态代码(401用于用户未通过身份验证,403当用户对某些资源没有权限时)等等,而不是在jQuery中处理它们.

但问题是,当我尝试返回401时,它总是返回“302:Found”.什么是自定义状态代码的窍门,为什么这不起作用?

public ActionResult My()
{
    if (User.Identity.IsAuthenticated == false)
    {
        return new HttpStatusCodeResult(401,"User is not authenticated."); 
            // Returns "302: Found"
    }

   // ... other code ...
}

编辑1:有趣的一点:

如果我用这样的404替换401:

return new HttpNotFoundResult("User is not authenticated.");

那么它确实给了一个404和jQuery可以抓住这个问题.然而,这不是一个优雅的解决方案,因为错误代码是不同的.

编辑2:302对我不好,结果将用于jQuery.get().fail(),但302不会triger fail()

解决方法

Lol这是一个很棒的问题

auth在MVC中的工作方式是,当您没有登录并尝试访问安全页面时,它会抛出一个401异常. MVC然后捕获此异常并将用户重定向到登录页面(这是您看到的302)

我想你可以做几件事来解决它:

>忽略它,它可能是你想要的行为
>禁用登录页面重定向(phil haack有一个很好的文章在这里:http://haacked.com/archive/2011/10/04/prevent-forms-authentication-login-page-redirect-when-you-donrsquot-want.aspx)

编辑

根据您的意见,以下代码将通过ajax请求时将所有重定向到401.这是避免列出的问题的一种方法

public class MvcApplication : HttpApplication {
    protected void Application_EndRequest() {
        var context = new HttpContextWrapper(Context);
        // If we're an ajax request,and doing a 302,then we actually need to do a 401
        if (Context.Response.StatusCode == 302 && context.Request.IsAjaxRequest()) {
            Context.Response.Clear();
            Context.Response.StatusCode = 401;
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读