标签: blazor-server-side

错误 CS1660:无法将 lambda 表达式转换为类型“bool”,因为它不是委托类型

这让我发疯了多年。我拿了以下工作代码

<input @onchange="@((ui) => Console.WriteLine(ui.Value))" />
Run Code Online (Sandbox Code Playgroud)

并将其复制到一个新的 blazor 组件项目中。然后我开始收到错误

error CS1660: Cannot convert lambda expression to type 'bool' because it is not a delegate type

blazor blazor-server-side

11
推荐指数
2
解决办法
6276
查看次数

在 IIS 中运行 Web 应用程序时,HttpContext 为 NULL

我有两个应用程序,都运行在同一台 Windows 机器上。一个应用程序是 IdentityServer4,另一个是我自己的 Web 应用程序(服务器端 Blazor 应用程序)。

这两个 Web 应用程序都是使用 .NET Core 3.1 构建的。

当我导航到我的 Web 应用程序时,我首先被重定向到我的 IdentityServer4 应用程序。我登录,然后我被重定向回我的网络应用程序。

登录成功,因为IdentitServer的日志没有错误。此外,我claim在 Blazor 网页上看到了某个值。我这显示claim通过CascadingAuthenticationState我的Blazor页。通过那条路径,一切正常。

但是,每当我尝试HttpContext在我的“代码隐藏”文件中获取登录用户时,我都会返回一个 Null 引用。例如:

public UserService(IHttpContextAccessor httpContextAccessor)
{
    // HttpClient is NULL...
    var httpCtx = _httpContextAccessor.HttpClient;  
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当我在 Visual Studio 中本地运行我的应用程序时,一切正常。当我在 Visual Studio 中调试时,我看到HttpContext设置了我的所有用户数据。

但是,出于某种原因HttpContextNULL当我从 IIS 运行应用程序时。

我该如何解决这个问题?

iis asp.net-core identityserver4 blazor-server-side .net-core-3.1

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

服务器端 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
查看次数

NavigateTo 上的 NavigationError

我正在尝试 Blazor ServerSide 并创建了一个组件以在用户未登录时重定向到登录页面。

@inject Microsoft.AspNetCore.Components.NavigationManager NavigationManager;

@code {
/// <inheritdoc />
protected override Task OnInitializedAsync()
{
    NavigationManager.NavigateTo("Login");
    return Task.CompletedTask;
}
Run Code Online (Sandbox Code Playgroud)

}

但总是在调用“NavigateTo”时抛出以下异常:

"Microsoft.AspNetCore.Components.NavigationException: Exception of type 'Microsoft.AspNetCore.Components.NavigationException' was thrown.
   at Microsoft.AspNetCore.Components.Server.Circuits.RemoteNavigationManager.NavigateToCore(String uri, Boolean forceLoad)
   at Microsoft.AspNetCore.Components.NavigationManager.NavigateTo(String uri, Boolean forceLoad)
   at ApplySupportTool.Blazor.Pages.RedirectToLogin.OnInitializedAsync() in C:\\Users\\padruttn\\Documents\\git\\ApplySupportTool\\src\\ApplySupportTool.Blazor\\Pages\\RedirectToLogin.razor:line 8"
Run Code Online (Sandbox Code Playgroud)

有趣的是,尽管有例外,还是进行了导航。我也尝试使用路径“/login”来调用它,但这里的行为相同。

asp.net-core blazor-server-side

10
推荐指数
6
解决办法
8483
查看次数

Blazor 应用程序,如何添加模型状态验证错误?

如何在 SaveItem 事件中添加自定义验证消息(最好不要使用数据注释)?它应该显示在“ValidationMessage For=”上下文中。

@using System.ComponentModel.DataAnnotations
@page "/edititem"


<EditForm Model="@model" OnSubmit="@Submit" OnValidSubmit="@SaveItem">
    <DataAnnotationsValidator />
    <ValidationSummary />

    <InputText id="ItemName" @bind-Value="@model.ItemName" />
    <ValidationMessage For="@(() => model.ItemName)" />
    <button type="submit">Submit</button>
</EditForm>

@code {
    ItemModel model = new ItemModel();

    private void Submit()
    {

    }
    private void SaveItem()
    {


    }

    public class ItemModel
    {
        [Required]
        public string ItemName{ get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

blazor blazor-server-side blazor-client-side

10
推荐指数
2
解决办法
5243
查看次数

对如何在 Blazor App 中从 B2C 获取访问令牌感到困惑

我有一个配置了 B2C 身份验证的 Blazor 服务器端应用程序。这个应用程序将调用一个 webapi 来与我的服务进行任何数据交换。B2C 身份验证工作正常,直接从模板配置 B2C 身份验证是:

services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
            .AddAzureADB2C(options => { Configuration.Bind("AzureAdB2C", options); });
Run Code Online (Sandbox Code Playgroud)

这些声明只有我从我的登录策略返回的声明,没有任何我可以用来代表我的 Web api 进行身份验证的访问令牌(也用同一个 B2C 租户保护)。

我已经阅读了大约 100 个不同的文档,但在 blazor 的上下文中似乎没有任何意义。有没有人以前做过这件事可以说明一些问题?

一等奖是在用户第一次向 B2C 进行身份验证后请求访问令牌,然后将令牌保存在缓存中,以便在会话/浏览器打开或访问令牌有效时在 blazor 应用程序中用于任何 api 调用。

似乎这是正确的路径:https : //github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi/blob/master/TaskWebApp/Controllers/TasksController.cs但我什么我不明白的是:

  • 这是 Blazor 的正确方法吗?
  • 如何触发它以获取用户身份验证请求的访问令牌。我不清楚如何覆盖 B2C 身份验证构造函数。
  • 我可以在当前用户的声明中添加访问和刷新令牌,以便我可以在我的应用程序中全局使用 httpcontext 对象来获取执行我的 api 调用所需的令牌吗?
  • 上面文档中的代码当然在控制器中。希望将这种形式作为用户身份验证流程的一部分。
  • 似乎 B2C 身份验证的配置现在非常模板化......例如,我在哪里可以自定义身份验证的路由?我宁愿将用户定向到 /auth 或 /login 而不是 /AzureB2C/Login(为了掩盖明显的身份验证提供程序 url。我知道它会在地址栏中显示给用户......但是嘿......任何将非常感谢帮助将具体说明如何在 Blazor 服务器端处理此问题。

谢谢!

azure azure-ad-b2c blazor blazor-server-side

10
推荐指数
2
解决办法
2562
查看次数

使用 Entity Framework Core 的 Blazor 并发问题

我的目标

我想创建一个新的 IdentityUser 并显示已通过同一个 Blazor 页面创建的所有用户。该页面有:

  1. 通过您的表单将创建一个 IdentityUser
  2. 第三方的网格组件 (DevExpress Blazor DxDataGrid),它显示使用 UserManager.Users 属性的所有用户。此组件接受 IQueryable 作为数据源。

问题

当我通过表单 (1) 创建一个新用户时,我会收到以下并发错误:

InvalidOperationException:在上一个操作完成之前,在此上下文中启动了第二个操作。不保证任何实例成员都是线程安全的。

我认为问题与CreateAsync(IdentityUser user)UserManager.Users指的是相同的 DbContext 的事实有关

该问题与第三方的组件无关,因为我重现了相同的问题,并用一个简单的列表替换了它。

重现问题的步骤

  1. 使用身份验证创建一个新的 Blazor 服务器端项目
  2. 使用以下代码更改 Index.razor:

    @page "/"
    
    <h1>Hello, world!</h1>
    
    number of users: @Users.Count()
    <button @onclick="@(async () => await Add())">click me</button>
    <ul>
    @foreach(var user in Users) 
    {
        <li>@user.UserName</li>
    }
    </ul>
    
    @code {
        [Inject] UserManager<IdentityUser> UserManager { get; set; }
    
        IQueryable<IdentityUser> Users;
    
        protected override void OnInitialized()
        {
            Users = UserManager.Users;
        } …
    Run Code Online (Sandbox Code Playgroud)

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

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

将 Blazor 服务器应用程序转换为 Blazor Web 组装方法

我想通过 Blazor 技术开发一个 SPA 项目。

由于调试 Blazor Web 程序集应用程序的复杂性,我想先将其创建为服务器端应用程序,然后再将其更改为 Web 程序集应用程序应用程序。

这可能吗?如果是这样,在我成功使服务器端 Blazor 项目工作后,我需要进行哪些更改才能获得与 WebAssembly 项目相同的功能?

另外,在我的服务器端 Blazor 项目中是否有任何我应该避免的特定方法或技术,因为它们在使用 WebAssembly 时没有等效项?

.net-core blazor blazor-server-side blazor-client-side

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