标签: blazor-server-side

如何在 Blazor 中实现路由防护?

我目前正在尝试 Blazor 并已成功创建 JWT Auth 登录。我正在尝试创建警卫,但微软提供的文档并没有真正解释太多。如果用户未登录,是否有人可以指导我正确的方向来保护我的路线?谢谢。

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

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

Blazor 服务器应用程序中的 HttpContext.Session

我正在尝试HttpContext.Session在我的 ASP.NET Core Blazor Server 应用程序中使用(如本MS Doc 中所述,我的意思是:在启动时全部正确设置)

这是我尝试设置值时的代码部分:

var session = _contextAccessor.HttpContext?.Session;
if (session != null && session.IsAvailable)
{
    session.Set(key, data);
    await session.CommitAsync();
}
Run Code Online (Sandbox Code Playgroud)

当这个代码在剃刀称为组件OnAfterRenderAsyncsession.Set抛出以下异常:

响应开始后无法建立会话。

我(可能)理解该消息,但这使得 Session 基础设施非常不可用:应用程序需要在执行的每个阶段访问其状态......

我应该完全忘记DistributedSession基础设施,而去使用 Cookies 或浏览器 SessionStorage 吗?...或者这里是否有解决方法仍在使用HttpContext.Session?我不想只是为了较低级别的实现而放弃分布式会话基础设施......

(仅供参考:浏览器的会话存储不是跨选项卡,这很痛苦)

session httpcontext asp.net-core blazor-server-side

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

如何在不知道属性名称和类型的情况下过滤 blazor 组件中的通用列表参数

下面是一个带有搜索输入的无序列表,可在您键入时过滤列表。一切正常:

@page "/todolist"

<input @bind-value="SearchTerm" @bind-value:event="oninput" />

<span class="text-muted ml-5">
    Showing @FilteredToDos.Count out of @ToDoItems.Count
</span>

<h4 class="mt-4">To Do's</h4>
<ul>
    @foreach (var toDo in FilteredToDos)
    {
        <li>@toDo.Name</li>
    }
</ul>

@code {
    // Initialize SearchTerm to "" to prevent null's
    string SearchTerm { get; set; } = "";

    // Data
    class ToDoItem
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    List<ToDoItem> ToDoItems => new List<ToDoItem>
    {
        new ToDoItem {Id = 1, Name = …
Run Code Online (Sandbox Code Playgroud)

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

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

Blazor Server 每次使用的连接数受浏览器限制

我正在构建 Blazor 服务器端数据库应用程序。

我的要求之一是用户可以在不同的选项卡中打开每个网站页面。

我发现打开 5 个选项卡后,任何新页面都被阻止呈现。如果我关闭一页,则可以呈现第 6 页。显然,这是因为浏览器一次只能支持有限数量的 SignalR 连接。我读过 Chrome 的限制是一次 6 个(虽然我只能让 5 个工作)。

Chrome 中的错误消息:

Error: Connection disconnected with error 'Error: Server returned handshake error: Handshake was canceled.'

Error: Error: Server returned handshake error: Handshake was canceled.

Uncaught (in promise) Error: Cannot send data if the connection is not in the 'Connected' State.
    at e.send (blazor.server.js:1)
Run Code Online (Sandbox Code Playgroud)

这个问题有解决方案吗?或者我是否需要探索移植到 Blazor 客户端?

我找到了有关此主题的以下文章,但不确定它是否可以应用于 Blazor 应用程序: SignalR 和浏览器连接限制

这有点可怕,因为我已经构建了相当多的代码,并且不想花太多时间尝试破解解决方法。

signalr blazor blazor-server-side

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

用于 onclick 的 Blazor 条件 if 语句

如果 IsActive bool 为真,我有一个跨度应该有一个 onclick 属性。否则跨度应该没有 onclick 属性。

例如

@if (IsActive == true)
{
    <span @onclick="@(e => Go.DoSomething("please"))">
        @s.DisplayText
    </span>
}
else
{
    <span>
        @s.DisplayText
     </span>
}
Run Code Online (Sandbox Code Playgroud)

有没有办法避免使用三元运算符的重复代码?例如

@(IsActive == true ? "add onclick method somehow?" : "")
Run Code Online (Sandbox Code Playgroud)

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

4
推荐指数
2
解决办法
2829
查看次数

如何使用 IHttpClientFactory 在 Blazor 服务器中配置 HttpClient 基地址

我正在尝试HttpClient在使用的Blazor服务器中配置的基地址,IHttpClientFactory但出现运行时异常:

    services.AddHttpClient("ApiClient", (provider, client) =>
    {
        var uriHelper = provider.GetRequiredService<NavigationManager>();
        client.BaseAddress = new Uri(uriHelper.BaseUri);
    });
Run Code Online (Sandbox Code Playgroud)
System.InvalidOperationException: 'Cannot resolve scoped service 'Microsoft.AspNetCore.Components.NavigationManager' from root provider.'
Run Code Online (Sandbox Code Playgroud)

异常截图

有谁知道这里可能是什么问题?

dotnet-httpclient .net-core blazor httpclientfactory blazor-server-side

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

Blazor 服务器应用程序 $(document).ready() 等价物

我有一个 Blazor 服务器应用程序,我需要在加载文档时运行一个 js 函数——当我使用“静态”模式时,jQuery$(document).ready()工作正常,但我需要使用“ServerPrerendered”模式——当用户点击导航栏上的不同链接时, $(document).ready() 永远不会触发,因为 Blazor 使用 SingalR 来更新内容。建议的方法是使用JSRuntime.InvokeVoidAsync("jsfunctiont")inside OnAfterRenderAsyncdefaultLayout.razor但问题是此事件发生在所有子组件完全呈现之前,因此我的 js 函数将失败。我的问题是在所有子组件完全渲染后调用js函数的方式是什么?这相当于$(document).ready()在 Blazor 服务器应用程序中使用“ServerPreRendered”模式?

太感谢了!

document-ready blazor blazor-server-side

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

在 Blazor 中将 Identity 与 AddDbContextFactory 结合使用

在我的 Blazor .Net Core 3.1 服务器端应用程序中,我最近将 EF 内容范围从临时更改为使用工厂扩展,并且运行良好。但是,我将相同的 dbcontext 工厂代码添加到使用 Identity 的第二个项目中,并且在启动时出现异常。

InvalidOperationException: Unable to resolve service for type 'OMS.DALInterfaces.Models.OmsDbContext' while attempting to activate 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`9
Run Code Online (Sandbox Code Playgroud)

这在没有使用工厂类时工作正常(即让 DI 处理 OMSDbContext)

services.AddDbContext<OmsDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")),
            ServiceLifetime.Transient
            );
            
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
         .AddRoles<IdentityRole>()
         .AddEntityFrameworkStores<OmsDbContext>();
Run Code Online (Sandbox Code Playgroud)

现在在使用身份的项目中我尝试过:

services.AddDbContextFactory<OmsDbContext>(opt =>
                opt.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))
                .EnableSensitiveDataLogging());

services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
                .AddRoles<IdentityRole>()
                .AddEntityFrameworkStores<OmsDbContext>();
Run Code Online (Sandbox Code Playgroud)

那么在使用Factory扩展时如何在启动时定义Identity呢?

asp.net-identity entity-framework-core asp.net-core blazor blazor-server-side

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

使用 C# 在 Blazor 中动态生成圆圈

我将从数据库中提取一些数字,一旦提取,我想围绕数字生成圆圈并根据数字调整圆圈的大小。这意味着 140 的圆将比 120 的圆大,60 的圆将小于 120 的圆

我将使用 Blazor 和 C# 来开发它。我该怎么办?我是 Blazor 的新手。圆圈也应该是可拖动的。

在此处输入图片说明

c# blazor-server-side

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

如何从 Blazor 中的另一个组件重新渲染一个组件?

我有一个电子商务Blazor 服务器项目,我想在从Product Component向 Cart 添加一个项目后重新渲染Cart组件。我尝试将 Cart 组件继承到 Product 组件并运行 Cart 组件的公共方法来重新渲染其组件。

产品组件中的添加到购物车方法。

产品.Razor

 public async Task AddToCart()
{
    //The adding logic in this area

    StateHasChanged();
    Reload(); // this method is inherited from the Cart Component trying to re-render the Cart Component
    //Does not work
}
Run Code Online (Sandbox Code Playgroud)

购物车剃刀

[Parameter]
public List<Models.Cart> CartItem { get; set; }

protected override void OnInitialized()
{
    CartItem = _context.Cart.Where(i => i.CustomUserId == _userManager.GetUserId(_httpContextAccessor.HttpContext.User) && !i.IsSold).ToList();
}


public void Reload() …
Run Code Online (Sandbox Code Playgroud)

blazor blazor-server-side asp.net-blazor

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