将 Blazor 客户端消费 Web API 与 Windows 身份验证结合使用

kar*_*arl 3 c# client-side blazor

目前,我有一个与 Angular 客户端一起运行的应用程序,使用带有 Windows 身份验证的 Web API。

现在我正在考虑用 Blazor(客户端)替换这个前端,但是在身份验证方面我面临一些挑战。

在 Angular 中,我只是将 withCredentials 设置为 true 以便提交所需的信息。

下面的代码使用 Blazor 服务器端按预期工作,但由于我想使用 Blazor 客户端,这不是一个选项,对我没有太大帮助。


    IEnumerable<SearchView> searchResults;
    int NumberOfItems;

    protected override async Task OnInitAsync()
    {
        using (var client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }))
        {
            var result = await client.GetJsonAsync<Response<SearchView>>("http://localhost:80/search");
            NumberOfItems = result.TotalItemCount;
            searchResults = result.Items;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码抛出“PlatformNotsupportedException”。

WASM:System.PlatformNotSupportedException:当前平台不支持 System.Net.Http.HttpClientHandler。WASM:位于 <4399d2484a2a46159ade8054ed94c78e> 中的 System.Net.Http.HttpClientHandler.set_UseDefaultCredentials (System.Boolean 值)<0x1d63160 + 0x0000c>:0

显然,使用 Blazor 客户端不支持提供的代码,但如果有任何替代方法可以实现我想要的目标,我们将不胜感激。

ca8*_*msm 5

我刚刚遇到了同样的问题,无法让它与 HttpClient 一起工作,但我确实使用 HttpRequestMessage 来管理它:

string APIURL = "https://localhost:44390/api/models";

// create request object and pass windows authentication credentials
var request = new HttpRequestMessage(HttpMethod.Get, APIURL);
request.SetBrowserRequestCredentials(BrowserRequestCredentials.Include);

// send the request and convert the results to a list
var httpResponse = await Http.SendAsync(request);
models = await httpResponse.Content.ReadFromJsonAsync<myModel[]>();
Run Code Online (Sandbox Code Playgroud)