首页 文章

对于任何Web API调用,通过请求全局传递来自客户端和MVC的信息

提问于
浏览
0

我需要从客户端和MVC通过请求全局传递来自MVC和UI的任何Web API调用的信息 .

我使用HttpClient进行WebApi调用 .

我使用MVC中的中间件来拦截Web API调用,在Request中添加一些自定义头文件,如下所示 . 以下是我的示例代码 .

public async Task Invoke(HttpContext context)
    {
        context.Request.Headers.Add("AuditInfo", "xxxxxxxxxx");
        await next.Invoke(context);
    }

当我从WebApi检查请求标头时,我无法看到我在中间件中添加的标头 .

注意:如果我在创建HttpClient时添加 Headers ,我可以成功添加 Headers 并从WebApi Request查看它,如下所示 . 但我想为从MVC和UI制作的Web API请求全局添加此功能 .

代码添加 Headers 并调用API:

HttpClient客户端=新的HttpClient();

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(“application / json”));

client.DefaultRequestHeaders.Add(“AuditInfo”,“xxxxxxxxxx”);

client.BaseAddress = new Uri(“http://localhost:62239/”);

HttpResponseMessage响应= client.GetAsync(“api / test /”) . 结果;

if(response.IsSuccessStatusCode)string jsonResponse = response.Content.ReadAsStringAsync() . Result;

1 回答

  • 0

    如果我理解正确,你想在mvc应用程序中使用中间件来处理 HttpClient . 中间件用于处理传入请求,而不是传出请求 . 由于 HttpClient 请求是传出请求,因此您无法使用中间件来处理它 .

    但我想为Web API请求全局添加此功能

    您可以为此创建一个 HttpClient 工厂类:

    public interface IHttpClientFactory
    {
        HttpClient GetClient();
    }
    public class HttpClientFactory : IHttpClientFactory
    {
        public HttpClient GetClient()
        {
            HttpClient client = new HttpClient();
    
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    
            client.DefaultRequestHeaders.Add("AuditInfo", "xxxxxxxxxx");
    
            client.BaseAddress = new Uri("http://localhost:62239/");
            return client;
        }
    }
    

    然后,只要您需要获取并使用它:

    private readonly IHttpClientFactory _httpClientFactory;
    ....
    var client = _httpClientFactory.GetClient();
    HttpResponseMessage response = client.GetAsync("api/test/").Result;
    
    if (response.IsSuccessStatusCode) string jsonResponse = response.Content.ReadAsStringAsync().Result;
    

相关问题