标签: blazor-webassembly

InteractiveWebAssembly 页面似乎需要在服务器端和客户端都声明服务

我正在从 Blazor WebAssembly 项目迁移到 .net 8“Blazor Web App”项目,该项目支持客户端和服务器渲染内容。

我对 IoC 的工作方式有点困惑。这是文档没有提到的事情,但在全新的“Blazor Web App”项目上清楚地再现了这一点:对于定义为的页面@rendermode InteractiveWebAssembly(例如Counter.razor带有注入的服务,如@inject ITestIoc testIoc),我必须ITestIoc在两个位置定义服务:Program.cs客户端项目和Program.cs服务器项目,即使它只在 wasm 内部使用。ITestIoc如果我错过了一处,它会抛出服务未定义的异常。

可能发生的情况是,它InteractiveWebAssembly首先在服务器端渲染页面,然后通过 wasm 进行所有进一步的交互。因此,“Blazor Web App”中的 WebAssembly 似乎与常规 WebAssembly 项目中的处理方式有所不同。我知道还有另一种类型的 WebAssembly 类型的项目,仅支持 wasm,但我也希望可以使用服务器端。所以我想知道是否有任何办法可以解决这个问题,如果我想要某些页面仅进行 wasm 渲染,而根本不需要服务器渲染?

asp.net-core blazor blazor-server-side blazor-webassembly

2
推荐指数
1
解决办法
209
查看次数

Blazor WASM Asp.net core Hosted = Blazor 服务器端?

我在别处读到在创建 Blazor 服务器端应用程序时,每次您的应用程序用户与该应用程序交互时,服务器都会创建您的应用程序实例,这意味着,如果您有 1000 个用户同时使用您的应用程序,您的托管服务器将必须同时管理 1000 个应用实例。

因此,如果这是真的,Blazor WASM Asp.net Core 托管应用程序的 Asp.net 核心托管层是否也是这种情况?意思是,如果您有 1000 个用户同时向 WebAPI 发送请求,是否会创建 1000 个实例来处理请求?

c# asp.net blazor blazor-server-side blazor-webassembly

1
推荐指数
1
解决办法
1164
查看次数

Blazor:如何在 HTML 渲染后调用 JavaScript

我有一个自定义组件,当它在浏览器中呈现时,我需要测量其大小(在 JavaScript 中)并回调 Blazor。

如何注册 JavaScript 以在特定组件渲染完成后调用?

blazor blazor-server-side blazor-webassembly

1
推荐指数
1
解决办法
3886
查看次数

如何从 Razor Pages (Blazor WebAssembly) 中的 launchSettings.json 文件访问属性?

        "APIs": {
        "API-1": "http://localhost:5000/student",
        "API-2":  "http://localhost:5001/teacher"}
Run Code Online (Sandbox Code Playgroud)

我在 launchSettings.json 文件中创建了这些属性。现在我需要访问 Student.razor 页面中的 API-1 和 API-2 值。我尝试像这样使用它..

List<Student> students = await http.GetFromJsonAsync<List<Student>>("API-1");
    
Run Code Online (Sandbox Code Playgroud)

blazor blazor-client-side asp.net-blazor blazor-webassembly

1
推荐指数
1
解决办法
1554
查看次数

获取当前用户 Blazor webassembly 的 UserId

所以我正在编写一个带有 asp.ner 核心标识的 Blazor webassembly 应用程序。我需要获取当前用户的 ID,而不是 Identy 中的方法提供的用户名。

方法

语境。用户.身份.名称

提供用户名,但我需要模型/表中 fk 的 ID。

我不能使用用户名,因为用户名可能会改变。

我已经在网上搜索过,但是我一直只看到返回的用户名。

任何帮助将不胜感激。

entity-framework asp.net-core blazor blazor-client-side blazor-webassembly

1
推荐指数
2
解决办法
5210
查看次数

在 Blazor Wasm 中读取本地/静态文件

我的项目是在Blazor WASM 中创建的(我不想使用 Blazor 服务器)

我想从 wwwroot 读取 XSD 文件:

在此处输入图片说明

在我的 XsdService.cs - C# 类中,我正在尝试:

string pathToXsd = Path.Combine("plcda","extPL_r2.xsd");
string transformataHTML = System.IO.File.ReadAllText(pathToXsd);
Run Code Online (Sandbox Code Playgroud)

但是,我总是收到错误:

Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
      Unhandled exception rendering component: Could not find a part of the path "/plcda/extPL_r2.xsd".
System.IO.DirectoryNotFoundException: Could not find a part of the path "/plcda/extPL_r2.xsd".
Run Code Online (Sandbox Code Playgroud)

那么是否有机会将自定义/静态/本地文件包含到 Blazor WASM 中?即使应用程序离线也能阅读它们?

c# progressive-web-apps blazor blazor-client-side blazor-webassembly

1
推荐指数
1
解决办法
3503
查看次数

Blazor WebAssembly。在布局级别添加授权属性

我从一个 Visual Studio 模板开始,一个新的 Blazor WebAssembly,以身份验证和 Web API 作为服务器端。

我的问题是保护所有页面而不仅仅是某些页面。我尝试添加:

@using Microsoft.AspNetCore.Authorization
@attribute [Authorize]
Run Code Online (Sandbox Code Playgroud)

到 MainLayout 而不是所有页面,但没有任何运气。我想这样做是因为我正在写一个管理员,如果没有连接,我根本不希望人们看到布局

.net asp.net-core blazor-client-side blazor-webassembly

1
推荐指数
2
解决办法
2396
查看次数

HttpClient 出现问题 - blazor 中的 PostAsJsonAsync

我正在尝试以PostAsJsonAsyncPostJsonAsync更新之前相同的方式使用它,但我收到此错误:

CS1503 参数 3:无法从“ICCR.Shared.LoginModel”转换为“ICCR.Shared.LoginResult” ICCR.Client

代码中的 registerModel 标记为红色,如果您告诉我如何解决,我将不胜感激。

public async Task<RegisterResult> Register(RegisterModel registerModel)
    {
    
        var result = await _httpClient.PostAsJsonAsync<RegisterResult>("api/accounts", registerModel);
        return result;
    }
Run Code Online (Sandbox Code Playgroud)

blazor asp.net-core-3.1 blazor-webassembly

1
推荐指数
1
解决办法
1869
查看次数

如何向 Blazor 组件添加 HTML 属性(类等)?

这似乎是一个非常基本的问题,但我还没有找到我正在寻找的答案。

假设您有一个名为 的 Blazor 组件<Button>,该组件具有诸如Label等参数。当您使用该组件时,这些参数的接收方式类似于 HTML 属性:

<Button Label="Sign Up" />
Run Code Online (Sandbox Code Playgroud)

但是如何为组件设置实际的 HTML 属性?!例如,假设您想为组件表示的元素提供额外的类,或标题属性、角色或类型等。以下显然不起作用,因为组件标记上的所有属性都是预期的成为该组件的参数:

<Button Label="Sign Up" class="foo" type="submit" id="bar" />
Run Code Online (Sandbox Code Playgroud)

因此,我能想到的唯一方法是为该组件内的每个属性声明一个参数(公共属性)。

<button type="@Type" class="button @Class" id="@Id">@Label</button>

@code {
    [Parameter]
    public string Class { get; set; }

    [Parameter]
    public string Type { get; set; }

    [Parameter]
    public string Role { get; set; }

    [Parameter]
    public string Id { get; set; }

    // And others
}
Run Code Online (Sandbox Code Playgroud)

然后在使用组件时你这样做:

<Button Label="Sign Up" Class="foo" Id="bar" Type="Submit" />
Run Code Online (Sandbox Code Playgroud)

但这显然并不理想。这不方便,而且看起来像是一个不必要的抽象层。

所以,我的问题是:这应该怎么做?如果有这样的事情,那么“标准”的方法是什么。难道没有比为每个属性声明参数更方便的方法吗?

我一般是 …

blazor blazor-server-side blazor-webassembly

1
推荐指数
1
解决办法
1482
查看次数

使用 Blazor 调用 JavaScript 函数(来自外部库)

我尝试调用一个 JS 函数。JS 脚本由第三方提供。

在简单的 HTML/JS 中,我可以写:

<html>
    <head>
        <script src="myscriptA.js"></script>
        <script src="myscriptB.js"></script>
    </head>
    <body>
        <div id="foo"></div>
        <div id="bar"></div>
        <script>
            var viewer = new foo.Viewer('foo', /*other params*/);
            viewer.function1().then(() => { /*ommited code*/ }).catch((error) => { console.log(error)});
            document.getElementById('bar').addEventListener('click', event => {
                var b1 = new B('bar', /*params*/)});
                var b2 = new B('foo');
            viewer.addB(b1, b2, { click: function(e) { viewer.function2() } });
        </script>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我想用 Blazor 做同样的事情。目前,我可以myscriptA.js使用我的组件访问该文件:

Page3.razor

@page "/Page3"
@inject IJSRuntime JS
@code {
    var scriptA = await …
Run Code Online (Sandbox Code Playgroud)

javascript c# blazor blazor-webassembly

1
推荐指数
1
解决办法
658
查看次数