gpt4 book ai didi

asp.net - 当我将 ASP.NET HTTP-StatusCode 硬编码为 401 时,我总是跳到登录页面?

转载 作者:行者123 更新时间:2023-12-02 14:58:03 24 4
gpt4 key购买 nike

我有一个 API 设置。当用户提供无效/缺失的 API key 时,我尝试将 Response.StatusCode 设置为 401,但某些内容不断将我跳到登录页面。这是一个 API...所以我不想要那个。我希望向他们发送 json 错误消息,代码为 401。

此示例 api 的 URL 为:/api/search/foo?apikey=12345&bar=hi+stack+overflow

我做错了什么?

这是一些示例代码:-

// Do we have an Api Key that is legit?
if (!CheckAPIKey(context))
{
json = JsonConvert.ExportToString("Invalid API key or no API key was provided.");
context.Response.StatusCode = 401; // Not authorised.
}
else
{
... get json data ...
}

context.Response.Write(json);

另外,我的 web.config 中有以下内容,如果这有帮助的话......

<authentication mode="Forms">
<forms loginUrl="~/Pages/Login.aspx" protection="Validation" timeout="1000000000" requireSSL="false" slidingExpiration="true" defaultUrl="Default.aspx">
</forms>
</authentication>

有什么想法吗?

最佳答案

尝试在Globals.asax的Application_EndRequest中处理401。您已设置表单例份验证模式,因此它正在执行其应该执行的操作,即重定向到 401 状态代码上的 Login.aspx 页面。

你的代码变成这样:

HttpContext context = HttpContext.Current;
// Do we have an Api Key that is legit?
if (!CheckAPIKey(context))
{
context.Response.StatusCode = 401; // Not authorised.
}
else
{
... get json data ...
}
context.Response.Write(json);

在 Application_EndRequest 中,类似:

protected void Application_EndRequest(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
if (Response.StatusCode == 401)
{
Response.ClearContent();
json = JsonConvert.ExportToString("Invalid API key or no API key was provided.");
context.Response.Write(json);
}
}

关于asp.net - 当我将 ASP.NET HTTP-StatusCode 硬编码为 401 时,我总是跳到登录页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1286800/

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