微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

API调用中的GET方法保留标头

如何解决API调用中的GET方法保留标头

我有一个asp.net核心应用程序,并且我希望请求标头保留在响应中。 我在邮递员的请求中有3个标头,

Authorization: "Bearer xxxxx"
azet-Accept: application/json"
azet-UseLatestversion: true

这是我在configure方法中设置的内容

app.Use(
        async (context,next) =>
        {
            context.Response.Headers.Add("X-Content-Type-Options","nosniff");
            context.Response.Headers.Add("Content-Security-Policy","default-src 'self'");
            context.Response.Headers.Add("Referrer-Policy","no-referrer");
            context.Response.Headers.Add(
                "Feature-Policy","accelerometer 'none'; camera 'none'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; payment 'none'; usb 'none'");
            context.Response.Headers.Add("x-frame-options","DENY");
            await next();
        });

    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(
        endpoints =>
        {
            endpoints.MapControllers();
        }); 

我希望在响应中返回诸如azet-UseLatestversion之类的标题

有什么想法吗?

谢谢

[HttpGet]
[Route("{apiPath}/{*requestUri}")]
public async Task<IActionResult> GetAsync(string apiPath,string requestUri = "")
{
    var queryString = this.Request.QueryString.Value;

    var headers = this.Request
        .Headers
        .ToDictionary(x => x.Key,y => y.Value.FirstOrDefault());

    var response = await this.proxy.GetAsync(
                apiPath,requestUri,queryString,headers,this.GetUserScopes());

    this.logger.Loginformation(
                $"GET statement received from {apiPath} {requestUri} {queryString} {DateTime.Now}.");

    var test = response.Content;

    if (response.HttpStatus != HttpStatusCode.OK)
    {
        this.logger.LogError($"{apiPath} {requestUri} {queryString} {response.HttpStatus}: {response.Content}");

        return this.StatusCode((int)response.HttpStatus,ErrorResponse.GetDefaultMessageForStatusCode((int)response.HttpStatus));
    }
     return this.Content(response.Content?.ToString(),response.ContentType);
 }

解决方法

我希望请求标头保留在响应中

这是一个工作示例:

app.Use(
    async (context,next) =>
    {
        foreach (var header in context.Request.Headers)
        {
            if(!header.Key.Contains(":"))
            {
                context.Response.Headers.Add(header.Key,header.Value.ToString());
            }
        }           
        await next();
    });

结果: enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。