在Blazor中,我们可以使用HttpClient库来发出HTTP请求。为了达到目的,我们需要调用API提供者的HTTP接口。下面是两个示例,分别展示了“不用凭证请求草莓奶昔”和“使用凭证请求草莓奶昔”的情况:
@inject HttpClient http
@code { private string strawberryShakeResponse;
private async Task MakeStrawberryShakeRequest()
{
var response = await http.GetAsync("https://example.com/strawberryshake");
if (response.IsSuccessStatusCode)
{
strawberryShakeResponse = await response.Content.ReadAsStringAsync();
}
}
}
@inject HttpClient http @inject IConfiguration configuration
@code { private string strawberryShakeResponse;
private async Task MakeStrawberryShakeRequest()
{
var token = await GetAccessToken();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
var response = await http.GetAsync("https://example.com/strawberryshake");
if (response.IsSuccessStatusCode)
{
strawberryShakeResponse = await response.Content.ReadAsStringAsync();
}
}
private async Task GetAccessToken()
{
var client = new HttpClient();
var disco = await client.GetDiscoveryDocumentAsync(configuration["AuthServer"]);
if (disco.IsError)
{
throw new Exception(disco.Error);
}
var tokenResponse = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
{
Address = disco.TokenEndpoint,
ClientId = configuration["ClientId"],
ClientSecret = configuration["ClientSecret"],
Scope = "strawberryshakeapi"
});
if (tokenResponse.IsError)
{
throw new Exception(tokenResponse.Error);
}
return tokenResponse.AccessToken;
}
}
在第二个示例中,我们首先使用IdentityServer或其他身份验证服务获取令牌