gpt4 book ai didi

c# - ASP.NET 中的 CORS 问题

转载 作者:太空狗 更新时间:2023-10-29 22:16:03 25 4
gpt4 key购买 nike

我有这个应用程序,我想在 Web.Config 中设置我的自定义 header ,唉,这并不总是万无一失。

  <customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="*" />
<add name="Access-Control-Allow-Headers" value="*" />
</customHeaders>

上面的集合和它的迭代如

  <customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="OPTIONS,GET,PUT,DELETE,POST" />
<add name="Access-Control-Allow-Headers" value="Authorization,Content-Type" />
</customHeaders>

并非在所有情况下都对我有用。截至目前,此设置在大约 50% 的测试机器上有效,并在其他机器上给出 405 Method Not Allowed

另一种方法是在 WebApiConfig.cs 中设置此项,并取消注释 Web.config 中的自定义 header 。

//Web API Cross origin requests - Enable
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);

为什么这其中有如此多的歧义,我如何确定 CORS 将始终在何处工作?我真的对在 Web.config 上设置 CORS 很感兴趣,因为我希望在部署的版本中灵活地修改它。

最佳答案

我相信您的“随机”问题是因为您没有处理预检 Options 请求 PUTDelete 动词

对于上面提到的两个动词,会生成一个额外的请求Options ,其中 Web API需要响应以确认它确实配置为支持 CORS .

要处理此问题,您需要做的就是返回一个空响应。您可以在您的操作中执行此操作,或者您可以像这样全局执行此操作:

protected void Application_BeginRequest()
{
if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
{
Response.Flush();
}
}

添加此额外检查以确保旧的 APIs旨在仅接受 GETPOST请求不会被利用。想象一下发送 DELETE请求 API在这个动词 不存在时设计。结果不可预测并且结果可能危险

另外,在 web.config , 您应该指定方法而不是使用 *

<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>

关于c# - ASP.NET 中的 CORS 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27373165/

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