【问题标题】:How do I get Http Header of calling API from a WebApi如何从 WebApi 获取调用 API 的 Http Header
【发布时间】:2019-05-24 19:55:04
【问题描述】:

我有两个 WebApi (.NET Core) 应用程序,例如WebApi1 和 WebApi2。现在我正在从 WebApi2 调用/使用 WebApi1(端点)。如何从 WebApi2 应用程序中获取 WebApi1 Http Header 值?

尝试使用 Request.Header;但没有得到 WebApi1 标头。这是在控制器动作中编写的代码-

                    (Request?.Headers ?? throw new Exception("Http Header is Null")).ToDictionary<KeyValuePair<string, StringValues>, string, string>(
                        header => header.Key, header => header.Value);

这里我正在获取 WebApi2 标头。

【问题讨论】:

  • 您能否提供您尝试获取标头的代码?不只是 Request.Header 指令,方法的相关部分。
  • @Skrface - 添加代码
  • 你确定你真的发送了任何标题吗?
  • 是的,我从 WebApi1 发送,来自我验证的 Fiddler。
  • @DebasisGhosh Request.Headers.GetValues(string name)?

标签: c# asp.net-core-webapi


【解决方案1】:

要从 api2 调用 web api1,您可以尝试 HttpClient 喜欢:

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    private readonly HttpClient _client;
    public ValuesController(IHttpClientFactory httpClientFactory)
    {
        _client = httpClientFactory.CreateClient();
    }
    // GET api/values
    [HttpGet]
    public async Task<ActionResult<IEnumerable<string>>> Get()
    {
        var response = await _client.GetAsync("https://localhost:44349/api/values");
        var headers = response.Headers.ToList();
        return new string[] { "value1", "value2" };
    }

并通过

注册HttpClient
public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpClient();
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

【讨论】:

    【解决方案2】:

    我在我的应用程序中错过了“启用 CORS”。

    https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2

    options.AddPolicy(MyAllowSpecificOrigins,
            builder =>
            {
                builder.WithOrigins("http://example.com",
                                    "http://www.contoso.com")
                                    **.AllowAnyHeader()**
                                    .AllowAnyMethod();
            });
    

    此处需要“AllowAnyHeader”才能传递自定义标头。现在我可以捕获自定义的 http 标头了。

    【讨论】:

      猜你喜欢
      • 2014-02-19
      • 2019-04-27
      • 2015-04-11
      • 2017-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      相关资源
      最近更新 更多