Передача информации от клиента и 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;