如何在 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时如何修复跨域读取阻塞?