我现在在Blazor客户端上进行了一段时间的实验,我注意到大多数不同的教程都建议客户端blazor通过服务器端Web-api来获取数据。
我不确定为什么会这样。为什么razor无法调用服务器方法,而开发人员却不得不向API公开相同的数据。为什么要执行此额外步骤?
例如
@page "/"
@inject HttpClient Http
<button onclick=@(async () => await PrintWebApiResponse())>Print Web API Response</button>
@functions {
private async Task PrintWebApiResponse()
{
var response = await Http.GetStringAsync("/api/Customer");
Console.WriteLine(response);
}
}
可以改写为
@page "/"
@inject HttpClient Http
<button onclick=@(async () => await PrintWebApiResponse())>Print Web API Response</button>
@functions {
private async Task PrintWebApiResponse()
{
ServerServices.Service service = new ServerServices.Service();
var response = service.GetCustomer();
Console.WriteLine(response);
}
}
我刚刚尝试了它(代码是Page Model中的部分类的一部分),它工作得很好。我在这里遗漏了一点吗?为什么建议通过API公开此方法?
答案 0 :(得分:5)
我不确定您如何设置测试代码,但实际上无法执行您所暗示的事情。 Blazor WebAssembly完全在客户端上运行,整个应用程序被引导并在那里运行。它没有与服务器的活动连接,因此无法访问服务器端服务。这就是为什么您需要使用Web API调用服务器的原因。
Blazor WebAssembly仍然是客户端单页应用程序框架,例如Angular或Vue,它恰好使用C#。