ASP.NET 核心 3.1 Webapi 项目 returns header 中的来源为 null
ASP.NET Core 3.1 Webapi Project returns Origin as null in header
我有一个 WebApi 项目来提供数据,还有一个 ASP.NET Core 3.1 项目来调用 API。
我使用 Api 调用方 Header 字段(如 HOST、REFERER 和 ORIGIN)来检测调用 Api 的客户端域名以提供正确的数据,不想 post/get 域作为来自客户端的参数,只是想让其他域调用我的 api 并且我根据域名提供数据,我实现了:
Request.Headers.TryGetValue("Host", out var traceValueHost);
Request.Headers.TryGetValue("Referer", out var traceValueReferer);
Request.Headers.TryGetValue("Origin", out var traceValueOrigin);
但是当我发布代码时,所有 3 returns null。实际上我无法检测到客户端域并面临错误,这会是什么问题?客户如何 get/post 在他们的 Webapi 电话 headers 中向我发送他们的域名?
我找到的唯一方法是将 Origin 添加到客户端域 headers
public static async Task<T> GetWebApiAsync<T>(string postUrl, string domain="")
{
HttpClient Client = new HttpClient();
if (domain != "")
Client.DefaultRequestHeaders.TryAddWithoutValidation("Origin", domain);
string result = await Client.GetAsync(postUrl)?
.Result?.Content?.ReadAsStringAsync()??string.Empty;
if (result == string.Empty) return default(T);
return JsonConvert.DeserializeObject<T>(result);
}
我有一个 WebApi 项目来提供数据,还有一个 ASP.NET Core 3.1 项目来调用 API。 我使用 Api 调用方 Header 字段(如 HOST、REFERER 和 ORIGIN)来检测调用 Api 的客户端域名以提供正确的数据,不想 post/get 域作为来自客户端的参数,只是想让其他域调用我的 api 并且我根据域名提供数据,我实现了:
Request.Headers.TryGetValue("Host", out var traceValueHost);
Request.Headers.TryGetValue("Referer", out var traceValueReferer);
Request.Headers.TryGetValue("Origin", out var traceValueOrigin);
但是当我发布代码时,所有 3 returns null。实际上我无法检测到客户端域并面临错误,这会是什么问题?客户如何 get/post 在他们的 Webapi 电话 headers 中向我发送他们的域名?
我找到的唯一方法是将 Origin 添加到客户端域 headers
public static async Task<T> GetWebApiAsync<T>(string postUrl, string domain="")
{
HttpClient Client = new HttpClient();
if (domain != "")
Client.DefaultRequestHeaders.TryAddWithoutValidation("Origin", domain);
string result = await Client.GetAsync(postUrl)?
.Result?.Content?.ReadAsStringAsync()??string.Empty;
if (result == string.Empty) return default(T);
return JsonConvert.DeserializeObject<T>(result);
}