gpt4 book ai didi

c# - ASP.NET Web API CORS 不适用于 AngularJS

转载 作者:太空狗 更新时间:2023-10-30 00:10:20 24 4
gpt4 key购买 nike

我有一个在某个端口上本地运行的 ASP.NET Web API,我有一个在 8080 上运行的 angularjs 应用程序。我想从客户端访问该 api。

我可以成功登录并注册我的应用程序,因为在我的 OAuthAuthorizationProvider 中明确地在/Token 端点中设置了响应 header 。

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });

这很好。但是,我的其他 API 方法似乎不起作用。在我的 WebApiCongig.Register 中,我启用了 CORS 并将 EnableCors 属性添加到我的 Controller 以允许所有来源、所有 header 和所有方法。我可以在 Controller 上的 get 方法中设置一个断点,它会被击中。这是我在 chrome 中查看“网络”选项卡时发现的内容。

2 个请求被发送到相同的 api 方法。一种方法类型为 OPTIONS,另一种方法类型为 GET。 OPTIONS请求头包括这两行

Access-Control-Request-Headers:accept, authorization

Access-Control-Request-Method:GET

响应包括这些行

Access-Control-Allow-Headers:authorization

Access-Control-Allow-Origin:*

但是,GET 方法请求看起来很不一样。它返回 ok,状态代码为 200,但它不会在请求或响应中包含和访问控制 header 。就像我说的,它很好地访问了 API。我什至可以做一个 POST 并保存到数据库,但客户提示响应!!

我查看了每一个 SO 问题并尝试了启用 cors 的每一种组合。我使用的是 Microsoft.AspNet.Cors 5.2.2 版。我正在使用 AngularJS 版本 1.3.8。我还使用 $resource 服务而不是 $http,这似乎也没有什么不同。

如果我能提供更多信息,请告诉我。

顺便说一句,我可以通过简单地包含 Bearer token 来使用 Fiddler 和/或 Postman 访问 Web API。

最佳答案

您似乎没有处理预检 Options 请求

Web API需要回复 Options请求以确认它确实配置为支持 CORS .

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

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

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

我还建议通过 web.config 而不是 config.EnableCors(cors); 启用 Cors

这可以通过在 <system.webServer> 中添加一些自定义 header 来完成。节点。

<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 Web API CORS 不适用于 AngularJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27623389/

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