标签: blazor-webassembly

强制 Blazor webassembly 在客户端使用 Newtonsoft.Json

在 Blazor webassembly 中,有一种方法可以强制对 httpclient 和 GetJsonAsync、PostAsJsonAsync 等方法使用 Newtonsoft.Json 序列化。

或者唯一的方法是编写辅助方法并使用 GetAsync,然后使用 Newtonsoft.Json 手动序列化响应?

blazor blazor-client-side blazor-webassembly

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

Blazor WebAssembly Server 项目如何引用客户端索引?

使用模板:启用 ASP.NET Core 托管的 Blazor WebAssembly 应用程序

它创建项目:

  • BlazorApp1.Client
  • BlazorApp1.服务器

我可以看到服务器有一个对客户端的项目引用,但我无法确定哪些代码允许服务器显示客户端?

服务器如何知道客户端索引文件位于另一个程序集中?

客户端代码是否托管在同一端口上的服务器项目中?

我有点迷失试图弄清楚这一点。

blazor blazor-client-side blazor-webassembly

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

Blazor 相对 url

我的 navlink 定义如下

<NavLink href="/intro"></NavLink>

在开发中,它工作正常,因为网站的根目录与 blazor 应用程序处于同一级别。在 prod 中,我必须将 blazor 站点放在默认 iis 网站的文件夹中。所以我的网址变成这样

http://something/apps/cor/

所以最终<NavLink href="/intro"></NavLink>试图去http://something/introhttp://something/apps/cor/intro

我尝试了两者/intro,并且intro两者都导致了错误的行为。我不知道如何使这些链接相对于 blazor root 而不是 iis root。

iis blazor blazor-client-side blazor-webassembly

8
推荐指数
2
解决办法
3779
查看次数

使用 UserClaimsPrincipalFactory 定义声明

几天来,我尝试申报 Blazor 应用程序的索赔。我终于找到了一种应该可行的方法,但由于某种原因,我无法在索赔列表中找到我的索赔。我创建了以下 AppClaimsPrincipalFactory:

public class AppClaimsPrincipalFactory : UserClaimsPrincipalFactory<ApplicationUser>
{
    public AppClaimsPrincipalFactory(UserManager<ApplicationUser> userManager, IOptions<IdentityOptions> optionsAccessor) : base(userManager, optionsAccessor)
    {
    }
    public override async Task<ClaimsPrincipal> CreateAsync(ApplicationUser user)
    {
        var id = await GenerateClaimsAsync(user);
        if (user != null)
        {
            id.AddClaim(new Claim(ClaimTypes.GivenName, user.FirstName));
        }
        return new ClaimsPrincipal(id);


        var principal = await base.CreateAsync(user);

        if (!string.IsNullOrWhiteSpace(user.FirstName))
        {
            ((ClaimsIdentity)principal.Identity).AddClaim(new Claim(ClaimTypes.GivenName, user.FirstName));
        }

        if (!string.IsNullOrWhiteSpace(user.LastName))
        {
            ((ClaimsIdentity)principal.Identity).AddClaim(new Claim(ClaimTypes.Surname, user.LastName));
        }

        return principal;
    }
}
Run Code Online (Sandbox Code Playgroud)

我在Startup.cs文件的ConfigureServices中添加了以下代码:

services.AddScoped<IUserClaimsPrincipalFactory<ApplicationUser>, AppClaimsPrincipalFactory>();
Run Code Online (Sandbox Code Playgroud)

有人可以帮我找出我的代码有什么问题吗?先感谢您。

更新

感谢布莱恩·帕克为我铺平了道路。为了使其在其他人需要时能够工作,我更改了 AppClaimsPrincipalFactory 类,如下所示:

public class AppClaimsPrincipalFactory : UserClaimsPrincipalFactory<ApplicationUser> …
Run Code Online (Sandbox Code Playgroud)

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

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

用于依赖注入的 Blazor WASM 延迟加载程序集服务注册

我有一个延迟加载的程序集,其中包含需要使用内置依赖注入实现注册的服务。如何注册这些服务,以便可以通过正常的注入机制将它们作为依赖项注入到延迟加载的程序集包含的组件中。

webassembly blazor blazor-client-side blazor-webassembly

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

Blazor WebAssembly CSS 隔离范围身份不匹配

在 Blazor WebAssembly .NET Core 托管应用程序中,将 {PROJECT NAME}.Client 项目名称更改为“{PROJECT NAME}.Admin”(更改客户端项目名称)后,范围标识为 {PROJECT NAME} 中的 CSS 隔离。 Admin.styles.css 文件和 DOM 中渲染的对象是不同的。


我做了什么

我创建了一个具有身份验证功能的 .NET 核心托管 Blazor WebAssembly 应用程序。运行应用程序。工作得很好。

然后我更改了项目名称{PROJECT NAME}。客户端项目为“{PROJECT NAME}.Admin”。基本上所有地方都从“客户端”更改为“管理员”。

  • 到处都提到了命名空间
  • 项目文件夹中的 Client 文件夹

然后我添加了项目参考。

当我运行该项目时... 是登陆页面。


问题

所有功能都运行良好。所有组件均已渲染。但只有 Bootstrap 样式适用于 MainLayout 和 NavMenu 组件,因为它们使用 CSS 隔离。隔离的 CSS 文件生成的文件范围标识与渲染到 DOM 的文件范围标识不同。

{PROJECT NAME}.Admin.styles.css 文件的图像

渲染的 HTML图像

如果我手动更改范围身份,页面会呈现良好。但当我下次运行应用程序时它会重置。


我只是在玩 Blazor。因此,我期待解决此问题,而不是使用某种替代方法或解决方法来进行样式设置。我是在线论坛的新手。抱歉提供了不必要的信息或提供的信息较少。请索取所需的任何其他信息。

css c# asp.net-core blazor blazor-webassembly

8
推荐指数
2
解决办法
5234
查看次数

对 fetch 的访问已被 CORS 策略阻止 - Blazor 客户端 Web 程序集

我有一个 blazor Web 程序集,它从构建在 ASP.NET Core 上的外部 API 获取,但我无权访问该程序集。我可以执行 get 请求,但无法执行 post 请求。当我这样做时,我收到以下错误。

从源“http://localhost:56138”获取“http://external:9000/User/Create”的访问已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:无“访问” -Control-Allow-Origin'标头存在于所请求的资源上。如果不透明响应满足您的需求,请将请求模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。

api 的作者确认他启用了 cors 来允许启动中的任何标头,并建议我也这样做,但这并没有解决问题。我从调试器中确认我正在发送端点所需的正确数据格式,并且我也在与 Web 服务相同的 http 方案上运行。

这是program.cs中的客户端配置

builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri("http://external:9000/") });
builder.Services.AddCors(policy =>
{
   policy.AddPolicy("_myAllowSpecificOrigins", builder => builder.WithOrigins("http://external:9000/")
        .AllowAnyMethod()
        .AllowAnyHeader()
        .AllowCredentials());
   });
Run Code Online (Sandbox Code Playgroud)

这就是我发帖的方式

var dataJson = JsonConvert.SerializeObject(application);
var stringContent = new StringContent(dataJson, Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync($"User/Create", stringContent);
Run Code Online (Sandbox Code Playgroud)

我读过这是 blazor 组装的常见问题,但我不完全确定我读到的内容。我目前正在尝试将项目移动到 blazor 服务器以查看它是否有效,但我更喜欢它在 Web 组装上。

c# cors asp.net-core blazor blazor-webassembly

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

Blazor - 如何防止文本框 (InputText) 中出现非数字字符?

我在 blazor 中有一个 InputText,我想阻止非数字字符,执行此操作的基本 razor 和 C# 代码是什么?这就是我需要它工作的方式,用户输入一个字符,它会拒绝输入所有内容并显示一条验证消息,说明只允许使用数字。到目前为止,我已经尝试使用正则表达式的数据表示法范围属性,但这并不拒绝非数字字符。

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

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

Blazor:如何有条件地设置元素样式

在 Blazor 中,我确实想用条件设置输入元素的样式。这是我现在使用的代码,它可以工作,但后来我遇到了一个问题,因为这里使用了三个不同的输入元素。

@if (MyNumber > 100) 
    { <input type="number" @bind=MyNumber @bind:event="oninput" /> }
else if (MyNumber < 1)
    { <input type="number" @bind=MyNumber @bind:event="oninput" style="color:red" /> }
else
    { <input type="number" @bind=MyNumber @bind:event="oninput" style="background:lightgreen" /> }
Run Code Online (Sandbox Code Playgroud)

是否有更好的可能性来设置带有条件的样式?

编辑: 感谢您的回答,肯定有几种可能的解决方案。我什至使用以下属性找到了另一个:

<input type="number" @bind=MyNumber @bind:event="oninput" @attributes="SetStyle(MyNumber)" />
@code{
public Dictionary<string, object> SetStyle(int myNumber)
{
    var dict = new Dictionary<string, object>();
    if (myNumber > 100) { }
    else if (myNumber < 1) dict.Add("style", "color:red");
    else dict.Add("style", "background:lightgreen");
    return dict;
}
Run Code Online (Sandbox Code Playgroud)

webassembly blazor blazor-webassembly

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

Blazor WASM 中的 window.print

我是 Blazor 的新手,我一直在尝试查找window.print()Blazor 中是否有任何等效项。我想知道是否有任何预先制作的组件/帮助程序,或者我是否需要从头开始创建一个?我已经搜索得足够多了,但找不到任何东西。

c# blazor .net-5 blazor-webassembly

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