我正在从 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 渲染,而根本不需要服务器渲染?
我在别处读到在创建 Blazor 服务器端应用程序时,每次您的应用程序用户与该应用程序交互时,服务器都会创建您的应用程序实例,这意味着,如果您有 1000 个用户同时使用您的应用程序,您的托管服务器将必须同时管理 1000 个应用实例。
因此,如果这是真的,Blazor WASM Asp.net Core 托管应用程序的 Asp.net 核心托管层是否也是这种情况?意思是,如果您有 1000 个用户同时向 WebAPI 发送请求,是否会创建 1000 个实例来处理请求?
我有一个自定义组件,当它在浏览器中呈现时,我需要测量其大小(在 JavaScript 中)并回调 Blazor。
如何注册 JavaScript 以在特定组件渲染完成后调用?
"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) 所以我正在编写一个带有 asp.ner 核心标识的 Blazor webassembly 应用程序。我需要获取当前用户的 ID,而不是 Identy 中的方法提供的用户名。
方法
语境。用户.身份.名称
提供用户名,但我需要模型/表中 fk 的 ID。
我不能使用用户名,因为用户名可能会改变。
我已经在网上搜索过,但是我一直只看到返回的用户名。
任何帮助将不胜感激。
entity-framework asp.net-core blazor blazor-client-side blazor-webassembly
我的项目是在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
我从一个 Visual Studio 模板开始,一个新的 Blazor WebAssembly,以身份验证和 Web API 作为服务器端。
我的问题是保护所有页面而不仅仅是某些页面。我尝试添加:
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize]
Run Code Online (Sandbox Code Playgroud)
到 MainLayout 而不是所有页面,但没有任何运气。我想这样做是因为我正在写一个管理员,如果没有连接,我根本不希望人们看到布局
我正在尝试以PostAsJsonAsync与PostJsonAsync更新之前相同的方式使用它,但我收到此错误:
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 组件<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)
但这显然并不理想。这不方便,而且看起来像是一个不必要的抽象层。
所以,我的问题是:这应该怎么做?如果有这样的事情,那么“标准”的方法是什么。难道没有比为每个属性声明参数更方便的方法吗?
我一般是 …
我尝试调用一个 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)