我正在使用blazor服务器端应用程序。在那我需要引用本地数据源。
我已将Http用作默认客户端示例。
@code{
ChartData[] dataSource;
protected override async Task OnInitAsync()
{
dataSource = await Http.GetJsonAsync<ChartData[]>("scripts/aapl.json");
}
}
有人可以指导我解决此问题吗?
答案 0 :(得分:2)
托管模式
在托管模式下,您是否需要一个休息端点(或其他类型的传输模式)来访问数据并调用后端操作:
USER BACKEND
SIDE
HTTP
or other network
transport.
|
|
client ---- dto ---> rest api ----> server functions
(wasm)
|
|
服务器端模式
在服务器端模式下,您不需要通过rest api访问服务器数据,您的应用程序正在服务器上执行,只需直接注入服务并调用服务器功能即可,而无需通过网络传输。
USER BACKEND
SIDE
SignalR
(websocket)
|
|
client <--- virtual dom changes ---> .razor pages ----> server functions
(html
+css |
+js) |
|
|
奖金
要轻松地从托管模型切换到服务器端,可以为{IServiceInterface
和server functions
都创建一个rest client transport class
并使用依赖注入在每种情况下使用一个或其他实现。简化:
hosted model
|
- rest client trans class----> web api ----
| (IServiceInterface) | |
Client - | |--> server functions
| | | (IServiceInterface)
------------------------------------------
|
server side model
答案 1 :(得分:1)
与客户端Blazor不同,服务器端Blazor要求您将HttpClient添加到DI容器中,并将其注入到组件中。
您可以这样做:
// Server Side Blazor doesn't register HttpClient by default
if (!services.Any(x => x.ServiceType == typeof(HttpClient)))
{
// Setup HttpClient for server side in a client side compatible fashion
services.AddScoped<HttpClient>(s =>
{
var uriHelper = s.GetRequiredService<IUriHelper>();
return new HttpClient
{
BaseAddress = new Uri(uriHelper.GetBaseUri())
};
});
}
回答您的问题
如何在服务器端应用程序中获取本地数据源:
定义可以直接访问数据库的本地服务可以解决问题。请参阅默认的服务器端模板。您可以在服务中使用Entity Framework Core访问数据库对象。
请注意,如果您决定切换到Blazor客户端,则使用直接访问数据库的本地服务可能会产生不利影响,因为无法在客户端Blazor上执行的数据访问服务与服务器之间进行通信。这是计划如何实施Blazor应用程序重要性的示例。就个人而言,我会坚持使用HttpClient,并避免使用服务,但这是我的个人观点。其他人可能会不同意。
希望这对您有帮助...
答案 2 :(得分:1)
当从服务器端应用程序读取json文件时,这将很有帮助
@using Newtonsoft.Json
....
@code{
protected override async Task OnInitAsync()
{
{
dataSource = JsonConvert.DeserializeObject<ChartData[]>(System.IO.File.ReadAllText("./wwwroot/chartdata.json"));
}
}
}