Передача информации от клиента и MVC через глобальный запрос для любых вызовов Web API

Мне нужно передать информацию от клиента и MVC через глобальный запрос для любых вызовов Web API, которые были сделаны из MVC и UI.

Я использую HttpClient для звонков через WebApi.

Я использую Middleware от MVC для перехвата вызовов Web API и добавления некоторых пользовательских заголовков в запрос, как показано ниже. Ниже приведен мой пример кода.

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

Когда я проверяю заголовки запросов от WebApi, я не вижу заголовки, которые я добавил в Middleware.

Примечание. Я могу успешно добавить заголовки и просмотреть их из запроса WebApi, если добавлю заголовки при создании HttpClient, как показано ниже. Но я хочу добавить эту функциональность глобально для запроса Web API, который был сделан из MVC и UI.

Код для добавления заголовков и вызова API:

HttpClient client = new HttpClient ();

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

client.DefaultRequestHeaders.Add ("AuditInfo", "xxxxxxxxxx");

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

HttpResponseMessage response = client.GetAsync ("api / test /"). Result;

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

1 ответ

Если я вас правильно понимаю, вы хотите использовать промежуточное ПО в приложении MVC для обработки HttpClient, Промежуточное программное обеспечение предназначено для обработки входящих запросов, а не исходящих запросов. поскольку HttpClient запрос является исходящим запросом, вы не можете использовать промежуточное ПО для его обработки.

Но я хочу добавить эту функцию глобально для запроса веб-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;
Другие вопросы по тегам