.NET Core HttpClient - 如何避免自动重定向?

6

我正在使用.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个回答

18

AllowAutoRedirect属性属于HttpMessageHandler。使用AddHttpClient方法时,您可以使用ConfigurePrimaryHttpMessageHandler自行配置HttpMessageHandler。这是一个使用示例:

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

这在官方文档中有详细介绍:配置 HttpMessageHandler


-2

像这样,您可以根据自己的需求配置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();
    }
}

这里开始


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接