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

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

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

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

Ответы [ 2 ]

6 голосов
/ 14 марта 2019

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

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

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

0 голосов
/ 14 марта 2019

Подобным образом вы можете настроить 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();
    }
}

С здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...