.NET Core HttpClient - избежать автоматического перенаправления?

2

Я использую .NET Core 2.1 для использования некоторых API. В моем Startup.cs я настраиваю именованный HttpClient следующим образом:

services.AddHttpClient("MyApi", client =>
{
    client.BaseAddress = new Uri("https://foo.com");
});

Я хотел бы отключить автоматическое перенаправление после. Я знаю, что вы можете сделать это при создании нового HttpClient, передав SocketsHttpHandler с AllowAutoRedirect = false. Но при использовании вышеуказанного заводского шаблона я не вижу, где я могу это настроить, поскольку у меня нет доступа к конструкции HttpClient.

Теги:
.net-core
asp.net-core

2 ответа

6
Лучший ответ

Свойство AllowAutoRedirect принадлежит HttpMessageHandler. При использовании подхода AddHttpClient вы можете настроить сам HttpMessageHandler, используя ConfigurePrimaryHttpMessageHandler. Вот пример того, как использовать это:

services
    .AddHttpClient("MyApi", client =>
    {
        client.BaseAddress = new Uri("https://foo.com");
    })
    .ConfigurePrimaryHttpMessageHandler(() =>
    {
        return new HttpClientHandler()
        {
            AllowAutoRedirect = false
        };
    });

Это описано в официальных документах: настройка HttpMessageHandler

0

Таким образом, вы можете настроить httpClient, как вы хотите

    public interface ITwitterApiClient
{
    Task<List<string>> GetTweets();
}

public class TwitterApiClient : ITwitterApiClient
{
        public async Task<List<string>> GetTweets()
        {
            using (HttpClient client = new HttpClient())
            {
                //Blah blah do everything here I want to do. 
                //var result = await client.GetAsync("/tweets");

                return new List<string> { "Tweet tweet" };
            }
        }
}

В определении сервиса

services.AddTransient<ITwitterApiClient, TwitterApiClient>();

В контроллере

[Route("api/[controller]")]
public class TweetController : Controller
{
    private readonly ITwitterApiClient _twitterApiClient;

    public TweetController(ITwitterApiClient twitterApiClient)
    {
        _twitterApiClient = twitterApiClient;
    }

    [HttpGet]
    public async Task<IEnumerable<string>> Get()
    {
        return await _twitterApiClient.GetTweets();
    }
}

Отсюда

Ещё вопросы

Сообщество Overcoder
Наверх
Меню