11

Flurl具有进行 OAuth 和基本身份验证的方法:

await url.WithBasicAuth("username", "password").GetJsonAsync();
await url.WithOAuthBearerToken("mytoken").GetJsonAsync();

但是如何使用当前登录的用户进行 Windows 身份验证?Flurl 建立在其之上的 HttpClientHandler 有一个属性 UseDefaultCredentials 但我不知道如何在 Flurl 中使用它。

var httpClient = new HttpClient(new HttpClientHandler() 
{
    UseDefaultCredentials = true
});
4

2 回答 2

15

Flurl 智能地为每个域重用 HttpClientHandler,因此您不想在每次运行时都设置 UseDefaultCredentials。相反,您可以修改 HttpClientFactory 以返回一个配置为 UseDefaultCredentials 的。

public class UseDefaultCredentialsClientFactory : DefaultHttpClientFactory
{
    public override HttpMessageHandler CreateMessageHandler()
    {
        return new HttpClientHandler { UseDefaultCredentials = true };
    }
} 

然后,您需要告诉 Flurl 将此工厂用于您要使用 Windows 身份验证的域。

public static class FlurlConfiguration
{
    public static void ConfigureDomainForDefaultCredentials(string url)
    {
        FlurlHttp.ConfigureClient(url, cli =>
            cli.Settings.HttpClientFactory = new UseDefaultCredentialsClientFactory());
    }
}

然后,您只需在每个域的启动时调用一次。对于 ASP.NET,全局应用程序类中的 Application_Start 方法是一个好地方。

FlurlConfiguration.ConfigureDomainForDefaultCredentials("https://example.com");
FlurlConfiguration.ConfigureDomainForDefaultCredentials("http://services.example.com");

感谢 Todd Menier向我解释了这一点

于 2018-09-15T17:33:36.240 回答
0

如果它仍然相关。您可以设置凭据,像这样

 ((HttpClientHandler)url.Client.HttpMessageHandler).Credentials = new NetworkCredential(userName, password);
于 2019-10-14T11:44:27.897 回答