标签: blazor-server-side

服务器端 Blazor Asp.Net Identity SignInAsync 错误:无法修改响应标头

我试图在 Visual Studio 模板应用程序中通过 Blazor 获取 Asp.Net Identity 登录,它仍然使用 Razor Pages 和 MVC 登录,但只能让它在事件上工作OnInitAsync,这没有用,因为它需要在按钮点击时完成,而不是在页面加载时完成。

我的失败代码是

protected async Task LoginTest()
{
   await _SignInManager.SignInAsync(new ApplicationUser()
   { UserName = "test@test.com" }, true);
   UriHelper.NavigateTo("/", true);
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

System.InvalidOperationException: The response headers cannot be modified because the response has already started.
at Microsoft.AspNetCore.HttpSys.Internal.HeaderCollection.ThrowIfReadOnly()
at Microsoft.AspNetCore.HttpSys.Internal.HeaderCollection.set_Item(String key, StringValues value)
at Microsoft.AspNetCore.Http.Internal.ResponseCookies.Append(String key, String value, CookieOptions options)
at Microsoft.AspNetCore.Authentication.Cookies.ChunkingCookieManager.AppendResponseCookie(HttpContext context, String key, String value, CookieOptions options)
at Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler.HandleSignInAsync(ClaimsPrincipal user, AuthenticationProperties properties)
at Microsoft.AspNetCore.Authentication.AuthenticationService.SignInAsync(HttpContext context, String …
Run Code Online (Sandbox Code Playgroud)

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

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

Blazor(Razor 组件)从父组件刷新子组件

我有一个简单的子 Blazor 组件(MyModal),如下所示:

<div class="modal">
    <h3>@Title</h3>
    @BodyTemplate
</div>

@code
{
    [Parameter] string Title { get; set; }
    [Parameter] RenderFragment BodyTemplate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在我的父组件中,我这样称呼它:

<MyModal Title="Super Cool Modal">
        <BodyTemplate>
            @MyObject.Name
        </BodyTemplate>
</MyModal>

public MyObject MyObject { get; set; } = new MyObject();
Run Code Online (Sandbox Code Playgroud)

稍后在页面最初呈现后我更新,MyObject但引用的子组件本身@MyObject.Name永远不会更新。

似乎我必须在更新对象 ( StateHasChanged)后强制刷新子对象,但不确定如何使用此示例执行此操作。

razor-pages blazor blazor-server-side razor-components

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

如何在 Blazor 中获取客户端 IP 和浏览器信息?

如何在 Blazor 服务器端获取客户端信息,例如 IP 地址和浏览器名称/版本?

blazor blazor-server-side

10
推荐指数
5
解决办法
8049
查看次数

如何在 .NET 6 项目中使用现有的 .net Framework 4.8 类库?

我们在 Visual Studio 2022 中有 .NET 6 Blazor 服务器端项目。我们想在 .NET 6 中使用 .Net Framework 4.8 类库。在这个类库中,我们使用 System.Windows.Form 并且无法重新编译该类具有 .NET Standard 2.0 的库。

我已添加 .Net Framework 4.8 类库项目作为 Blazor 应用程序的依赖项。我能够编译解决方案,但当尝试运行 Blazor 应用程序时,它会抱怨“System.IO.FileNotFoundException:'无法加载文件或程序集'System.Windows.Forms,Version = 4.0.0.0,Culture =neutral, PublicKeyToken=b77a5c561934e089'。”。

我们只想在 Windows 中运行 Blazor 项目。

.net c# blazor-server-side .net-4.8 .net-6.0

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

如何使用区域在剃刀组件库中使用 blazor 服务器端?

我有一个现有的.net core 3.0 preview 7 web 应用程序。我的应用程序主要是组织成区域的剃刀页面,例如。Admin、Sales 等。如果我将blazor组件放在应用程序的根目录下,我可以成功使用它,但是,如果我将组件移动到 RCL,我可以访问该组件但它没有响应(单击按钮对于计数器示例不增加计数)。

我希望能够去localhost/Admin/RazorPageContainingBlazorComponentlocalhost/Sales/AnotherRazorPageContainingBlazorComponent

我在 Chrome 开发工具中收到此错误:''' 错误:无法完成与服务器的协商:错误

https://localhost:5000/myfeature/_blazor/negotiate 404 '''

我相信这是由将 signalR 集线器映射到https://localhost:5000/ 引起的,但我不确定如何添加额外的 blazor 集线器映射或如何更改 blazor.server.js 以使用根集线器。

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

9
推荐指数
2
解决办法
2454
查看次数

Blazor:从布局访问参数

如何从布局访问页面的路由参数?

我有一个接受路由参数的页面,如下所示:

@page /my-page/{Slug}
Run Code Online (Sandbox Code Playgroud)

我需要访问Slug在共享布局中呈现标记时的值。

我尝试OnParametersSet在布局文件中实现如下所示,但未设置该值。它仅在页面级别分配。

@inherits LayoutComponentBase

<div class="sidebar">
    <NavMenu />
</div>

<div class="main">
    <div class="top-row px-4">
            @this.Slug   <<<<------ display the parameter
    </div>

    <div class="content px-4">
        @Body
    </div>
</div>

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

    protected override void OnParametersSet()
    {
        // Slug is always null :-/
    }
}
Run Code Online (Sandbox Code Playgroud)

blazor blazor-server-side

9
推荐指数
2
解决办法
4873
查看次数

Blazor:在上一个操作完成之前,在此上下文中启动了第二个操作

我正在创建一个服务器端 Blazor 应用程序。以下代码位于Startup.cs.

services.AddDbContext<MyContext>(o => o.UseSqlServer(Configuration.GetConnectionString("MyContext")), ServiceLifetime.Transient);
services.AddTransient<MyViewModel, MyViewModel>();
Run Code Online (Sandbox Code Playgroud)

在 ViewModel 中:

public class MyViewModel : INotifyPropertyChanged
{
    public MyViewModel(MyContext myContext)
    {
        _myContext = myContext;
    }

    public async Task<IEnumerable<Dto>> GetList(string s)
    {
        return await _myContext.Table1.where(....)....ToListAsync();
    }
Run Code Online (Sandbox Code Playgroud)

并在剃刀文件中。

@inject ViewModels.MyViewModel VM
<input id="search" type="text" @bind="search" />
<input id="search" type="button" value="Go" @onclick="SearchChanged" />   
@code {
    string search = "";
    int currentCount = 0;
    async void SearchChanged() {
        currentCount++;
        dtos = GetList(search);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,有时单击搜索按钮时会出现以下错误?

System.InvalidOperationException: '在上一个操作完成之前,在此上下文中启动了第二个操作。这通常是由使用相同 DbContext 实例的不同线程引起的。有关如何避免 DbContext 线程问题的详细信息,请参阅 …

c# entity-framework entity-framework-core blazor blazor-server-side

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

MVC 中的 Blazor:组件被渲染,但 @onclick 不起作用。连接问题

我正在尝试在 .net core 3 MVC 项目中使用 Blazor。我使用了一些教程来做到这一点,比如https://fizzylogic.nl/2019/08/18/integrating-blazor-in-an-existing-asp-net-core-application/https://chrissinty.com /using-blazor-components-in-an-existing-mvc-application/

工作原理:Blazor 组件的初始化工作正常。OnInitializedAsync() 函数被触发,组件渲染得很好。

这是来自 MVC 视图的调用:

@(await Html.RenderComponentAsync<MyProject.Components.Locations>(RenderMode.ServerPrerendered))
Run Code Online (Sandbox Code Playgroud)

什么不起作用:在 Blazor 组件中使用 @onclick。这是一些示例代码:

<span @onclick="AddLocation"></span>

@code {
    private void AddLocation(){

    }
}
Run Code Online (Sandbox Code Playgroud)

它可能不起作用的原因是我在连接初始化时出错。组件不是从基本路径渲染的,而是从特定视图的 url 渲染的,我认为这会影响连接。我在 Chrome 的控制台中收到这些错误:

  • [2019-12-02T09:26:08.117Z] 信息:将“_blazor”规范化为“ https://localhost:44375/Locations/_blazor ”。_blazor/negotiate:1 加载资源失败:服务器响应状态为 404 () blazor.server.js:1
  • [2019-12-02T09:26:08.155Z] 错误:无法完成与服务器的协商:错误 e.log @ blazor.server.js:1 blazor.server.js:1
  • [2019-12-02T09:26:08.156Z] 错误:无法启动连接:错误 e.log @ blazor.server.js:1 blazor.server.js:15
  • [2019-12-02T09:26:08.156Z] 错误:错误 e.log @ blazor.server.js:15 blazor.server.js:1 -Uncaught (in promise) 错误:如果连接不在,则无法发送数据“连接”状态。

主要的错误可能是'将'_blazor '标准化为' https://localhost:44375/Locations/_blazor ' '。从基本路径请求 _blazor 有效。有谁知道在这种情况下如何设置基本路径?

(是的,普通 Razor 页面环境中的 …

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

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

Blazor 导航:在不更改重新加载页面的情况下更新 URL

我在我的应用程序中使用 URL 参数作为页面状态。

如何在不实际导航的情况下更改 URL?

谢谢!

(使用 blazor 服务器端)

c# blazor blazor-server-side

9
推荐指数
2
解决办法
2523
查看次数

.NET Core 3.1 Web API 和 Blazor 服务器端 JWT 身份验证

我想了解,如何为Blazor 服务器端应用程序设置JWT 身份验证

让我举一个例子:假设我们有一个 .NET Core 3.1 Web API 项目。该项目有自己的TokenController实现,它为有效的用户/密码组合提供 JWT。所有其他控制器对每个请求都需要这样的令牌。

验证身份验证的中间件配置如下:

// enabling JWT bearer scheme
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options => 
    {
        options.TokenValidationParameters = new TokenValidationParameters 
        {
            // TOKEN VALIDATION PARAMETERS
        };
    });

// applying default authentication policy
services.AddMvc(o => 
{
    o.EnableEndpointRouting = false;
    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    o.Filters.Add(new AuthorizeFilter(policy));
}).SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
Run Code Online (Sandbox Code Playgroud)

到这里为止,这工作得很好。

现在我想为这个项目添加一个漂亮的 Blazor 服务器端 UI,但我无法思考如何进行身份验证?

根据 Microsoft Docs,服务器端应用程序的身份验证应该在建立 SignalR 连接时进行:

Blazor 服务器身份验证

Blazor 服务器应用通过使用 SignalR 创建的实时连接运行。在建立连接时处理基于 SignalR 的应用程序中的身份验证。身份验证可以基于 cookie或其他一些不记名令牌。

(来源: …

.net jwt .net-core jwt-auth blazor-server-side

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