如何在 C# 中调用跨域 API

Posted

技术标签:

【中文标题】如何在 C# 中调用跨域 API【英文标题】:How to call Cross domain API in c# 【发布时间】:2016-08-01 11:45:00 【问题描述】:

我需要使用 C# 调用不同服务器的 API。 我正在使用以下方法

using (HttpClient client = new HttpClient())
                
                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "tolen");
                    var result = await client.GetStringAsync("url");
                    return JsonConvert.DeserializeObject(result);
                

但它总是给

403 禁止

我已经询问了这个 API 的开发者,他建议我也需要发送 preflight request

【问题讨论】:

您调用的服务是否也在 C# 中? 外部域的开发者必须设置他们的 API 以允许 CORS。飞行前请求只是检查外部 API 是否允许此请求。 ( app.UseCors(CorsOptions.AllowAll); ) CORS 是允许的,因为它可以从浏览器(Jquery)访问。那么我们可以在c#中创建一个飞行前请求吗? 【参考方案1】:

如果您的服务代码是用 c# 编写的,那么您可以在下面的 api 方法部分启用跨域访问

        [EnableCors(origins: "*", headers: "*", methods: "*")]
        public string Get()
        

以上代码为所有外部域启用 cors,但您只能通过这种方式指定自己的域

[EnableCors(origins: "http://yourdomain.com", headers: "*", methods: "*")]

有用的两个链接https://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api https://msdn.microsoft.com/en-us/magazine/dn532203.aspx

【讨论】:

以上是关于如何在 C# 中调用跨域 API的主要内容,如果未能解决你的问题,请参考以下文章

从Vue js通过axios调用谷歌地图海拔api时如何修复跨域读取阻塞?

在vue项目中配置proxy解决跨域问题

高分求助:C#中如何调用UpdateResource这个API函数!

使用 RESTful 服务保护跨域的 API 调用

如何在 C# 中解决跨域策略安全异常

如何从http调用获取调用者信息到c#中的另一个api