-2

尝试在登录对话框显示下方执行代码时,如果我取消登录错误,则会由于凭据无效而拒绝未经授权的访问。

    protected void Application_EndRequest(object sender, EventArgs e)
    {
        //verify that resquest is for api
        if (Request.Path.ToLower().StartsWith("/api/v1"))
        {
            if (Response.StatusCode == 302)
            {
                Response.StatusCode = 401;
                Response.ContentType = "application/json";
                Response.ClearContent();
                Response.Write("\"fail\"");
            }
            else if (Response.StatusCode == 500)
            {
                Response.StatusCode = 500;
                Response.ContentType = "application/json";
                Response.ClearContent();
                Response.Write("\"server error\"");
            }
        }
    }
4

1 回答 1

1

HTTP 代码 401 表示“未经授权”。当浏览器收到此错误代码时,它会认为是因为用户需要登录。浏览器会显示一个登录对话框,然后使用给出的登录详细信息再次尝试。

这正是应该发生的事情。

如果您想要简单地拒绝请求,那么您将在 HTTP 代码 403 之后,“禁止”。

但是,我不清楚你为什么要在这里实现。如果您自己的服务器代码返回 HTTP 302(重定向),您为什么要尝试将其转换为 HTTP 401/403/whatever?如果您出于某种原因不想执行重定向,请不要首先发出重定向!

于 2013-07-17T14:08:12.693 回答