当前,我有一个与Angular Client一起运行的应用程序,使用了Windows身份验证的Web API。
现在,我正在考虑用Blazor(客户端)替换此前端,但是在身份验证方面,我面临一些挑战。
在角度我只是将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;
}
}
}
上面的代码抛出“ PlatformNotsupportedException”。
WASM:System.PlatformNotSupportedException:当前平台不支持System.Net.Http.HttpClientHandler。 WASM:位于<4399d2484a2a46159ade8054ed94c78e>:0
中的System.Net.Http.HttpClientHandler.set_UseDefaultCredentials(System.Boolean值)<0x1d63160 + 0x0000c>很明显,使用Blazor客户端不支持所提供的代码,但是如果有任何其他方法可以实现我想要的功能,则将感谢任何指针和帮助。
答案 0 :(得分:1)
(尚无法)。 Blazor客户端在不支持Windows身份验证的.net框架的Mono运行时上运行。
您最好的选择是实施基于令牌的身份验证(例如,JWT)并使用ADFS。
答案 1 :(得分:0)
我遇到了同样的问题,无法与HttpClient一起使用,但是我确实通过HttpRequestMessage对其进行了管理:
stream_context_create
答案 2 :(得分:-1)
尝试一下:
注入httpClient
注意:客户端Blazor不支持HttpClientHandler。而是使用从HttpMessageHandler派生的WebAssemblyHttpMessageHandler。但是您不需要直接使用它,因为已经设置了DefaultCredentials。但是,如果要更改它,则需要在Startup类中配置WebAssemblyHttpMessageHandler。问我是否想知道...
@inject HttpClient httpClient
IEnumerable<SearchView> searchResults;
int NumberOfItems;
protected override async Task OnInitAsync()
{
var result = await httpClient.GetJsonAsync<Response<SearchView>>("http://localhost:80/search");
NumberOfItems = result.TotalItemCount;
searchResults = result.Items;
}
注意:以上代码虽然基本,但可能无法正常工作,至少在第一次尝试时无效。也许您需要进行一些调整。
当然,目前您不能使用Windows身份验证,但是您可以将Cookies身份验证与Identity一起使用,或者使用更好的Jwt身份验证。并且不要忘记Blazor已经拥有自己的身份验证系统...
希望这对您有帮助...