使用带有Windows身份验证的Blazor客户端使用Web API

时间:2019-06-11 11:27:57

标签: c# client-side blazor

当前,我有一个与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客户端不支持所提供的代码,但是如果有任何其他方法可以实现我想要的功能,则将感谢任何指针和帮助。

3 个答案:

答案 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;

    }

注意:以上代码虽然基本,但可能无法正常工作,至少在第一次尝试时无效。也许您需要进行一些调整。

  1. 请勿与HttpClient一起使用
  2. 将HttpClient作为Singleton添加到容器(Blazor客户端)
  3. 什么是响应

当然,目前您不能使用Windows身份验证,但是您可以将Cookies身份验证与Identity一起使用,或者使用更好的Jwt身份验证。并且不要忘记Blazor已经拥有自己的身份验证系统...

希望这对您有帮助...