标签: blazor-server-side

更改 Blazor 文件夹会导致我“找不到后备端点”

我创建了一个默认的 Blazor 项目,并希望在同一项目中拥有一个 Web API 部分以用于原型设计。

因此,我将所有控制器和相关内容放在一个Api子文件夹中,并将 Blazor 内容放在一个Blazor子文件夹中。

项目结构:

- Api
  - Controllers
    - AController.cs
- Blazor
  - Pages
    - _Host.cshtml
    - Counter.razor
    - Error.razor
    - FetchData.razor
    - Index.razor
  - Data
    - WeatherForecast.cs
    - WeatherForecastService.cs
  - Shared
    - MainLayout.razor
    - NavMenu.razor
  - _Imports.razor
  - App.razor
- appsettings.json
- appsettings.Development.json
- Program.cs
- Startup.cs
Run Code Online (Sandbox Code Playgroud)

Startup.cs

public class Startup
{
    public IConfiguration Configuration { get; }

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection …
Run Code Online (Sandbox Code Playgroud)

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

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

依赖注入中的 Blazor(服务器)作用域对象创建多个实例

为了演示目的,假设我有一个名为 StateManager 的类:

public class StateManager
{
    public StateManager()
    {
        IsRunning = false;
    }

    public void Initialize()
    {
        Id = Guid.NewGuid().ToString();
        IsRunning = true;
        KeepSession();
    }

    public void Dispose()
    {
        Id = null;
        IsRunning = false;
    }

    public string Id { get; private set; }
    public bool IsRunning { get; private set; }

    private async void KeepSession()
    {
        while(IsRunning)
        {
            Console.WriteLine($"{Id} checking in...");
            await Task.Delay(5000); 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它有一个在启动后运行的方法,每 5 秒将其 Id 写入控制台。

在我的 Startup 类中,我将其添加为范围服务:

services.AddScoped<StateManager>();
Run Code Online (Sandbox Code Playgroud)

也许我使用了错误的位置,但在我的MainLayout.razor文件中,我在OnInitializedAsync() …

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

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

从 Blazor 应用程序中的中间件类获取经过身份验证的用户

我有一个服务器端 Blazor 应用程序。每个用户想要访问某个页面时都必须经过身份验证。为此,用户被重定向到“身份服务器”登录页面。当用户使用正确的凭据登录时,他会被重定向回 Blazor 应用程序。

我已使用 设置我的 Blazor 应用程序CascadingAuthenticationState,以便我可以User在 Blazor 页面内访问该对象及其声明。

组件内部是这样的:

[CascadingParameter]
private Task<AuthenticationState> AuthenticationStateTask { get; set; }
...
... 
var authState = await AuthenticationStateTask;
var claims = authState.User.Claims; // Works fine.
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我可以访问用户的声明。

到目前为止,一切都很好。

但我还有一个中间件类,我需要在其中访问用户声明。

public async Task InvokeAsync(HttpContext context)
{
    if (context?.User?.Claims != null && context.User.Claims.Any())
    {
        Console.WriteLine("aaa");
    }

    // Call the next delegate/middleware in the pipeline
    await _next(context);
}
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,这些User主张总是空洞的。

为什么User.ClaimsBlazor 组件内部的对象填充了所有声明,但当我通过对象访问它们时它们是空的HttpContext

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

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

有没有办法从参数的注释创建 Blazor 组件文档?

使用 swagger,您可以根据注释自动创建 API 方法的文档。

除了 Blazor 组件之外,是否可以执行相同的操作?

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

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

使用 AuthenticationStateProvider 注销用户并使用 Blazor 将 User.Identity.IsAuthenticated 设置为 false

我继承了一个用 Blazor 和 .NET Core 3.1 编写的网站,我需要向用户提供一个“注销”按钮。该网站使用 的自定义实现AuthenticationStateProvider,方法如下GetAuthenticationStateAsync()

public override async Task<AuthenticationState> GetAuthenticationStateAsync()
{
    ClaimsIdentity identity = new ClaimsIdentity();

    if (_currentUser != null)
    {
        identity = GenerateClaimsForCurrentUser();
    }
    else
    {
        try
        {
            var user = await sessionStorage.GetItemAsync<Credentials>("User");
            if (user != null && await IsAuthentic(user))
            {
                _currentUser = await UserInfo(user);
                identity = GenerateClaimsForCurrentUser();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    return new AuthenticationState(new ClaimsPrincipal(identity));
}
Run Code Online (Sandbox Code Playgroud)

要验证用户是否已登录,代码为:

AuthenticationState authState = await authenticationState.GetAuthenticationStateAsync();
ClaimsPrincipal principal = authState.User; …
Run Code Online (Sandbox Code Playgroud)

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

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

ASP.NET Core 应用程序不从输出目录读取 appsettings.json,而是从项目之一读取 appsettings.json

当涉及 ASP.NET Core 时,我遇到了一种我不理解的行为。

在使用控制台应用程序以读取配置文件时,我通过以下方式将其复制到输出目录:

 <ItemGroup>
      <Content Include="mysettings.json">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
    </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

FileNotFoundException否则,如果我只使用文件名而不是完整路径,我就会得到。这样我就可以从其他项目导入文件(例如另一个设置 jsons)并且工作正常。

到目前为止,一切都很好。

但是,在 ASP.NET Core 中(更具体地说,我使用 ASP.NET Core 后端处理 Blazor Web Assembly 项目),当我运行服务器项目时,不会从输出目录中读取设置,而是从项目目录中读取设置。因此,我在尝试从解决方案中的另一个项目读取设置文件时遇到错误,因为应用程序在项目文件夹而不是输出文件夹中查找它。

我不确定它是否相关,但Directory.GetCurrentDirectory()显示/BlazorApp/Server了我宁愿期待的/BlazorApp/Server/bin/Debug/netcoreapp3.1

这是 ASP.NET Core 中的预期行为吗?如果是这样,我如何使用其他项目的文件?我想避免手动更新多个位置的设置。

提前致谢

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

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

如何在键入时修改输入并使 Blazor 查看更改

我有一个输入元素。keydown我在使用 JavaScript和事件输入时添加了一些过滤和修改文本的功能keypress

例如 - 当输入接受大写字符时,当您仅按“a”(无shift,无大写锁定)时,您会得到“A”。

这是可行的,但是输入值绑定根本不起作用。我只是调用preventDefault()JS 事件,就这样,绑定被破坏了。

我尝试自己调度该事件。我发送了新创建的KeyboardEvent并且CustomEvent类型为“change”的。什么都不起作用。我可以修改 JS 事件处理程序中的输入值,我可以在浏览器中看到更改,但我的 C# 却看不到。

我怎样才能做到这一点?我是否必须手动调用 C# 来更新绑定,还是有其他方法?

该代码应仅在最新的 Chrome / Firefox 浏览器上运行,较旧的浏览器可能不受支持。

javascript blazor blazor-server-side

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

仅允许在 blazor 中上传特定文件类型

我正在使用BlazorInputFileBlazor 中的包上传文件。

问题

这段代码不起作用。

<InputFile OnChange="OnFileUpload" accept="image/x-png,image/jpeg" title="Upload jpeg or png image" />
Run Code Online (Sandbox Code Playgroud)

如何限制用户在 Blazor 中只能上传 jpeg 或 png?如果需要更多内容来支持该问题,请告诉我。

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

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

BLAZOR:使用组件基类模型时自动触发 Onclick 事件

我有一个剃刀页面,如下所示。它继承了 PaymentBase 类,该类具有代码背后的代码。

@page "/payment"
@inherits PaymentBase

<h1>Payments</h1>

<button class="btn btn-primary" onclick="@GetList()">List all payments</button>
Run Code Online (Sandbox Code Playgroud)

一旦页面呈现,而不是在点击事件上,该GetList函数就会自动触发。请帮忙?

blazor blazor-server-side

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

如何添加日期时间验证范围

我的 blazor 服务器端组件有一个简单的输入模型。我想对 DateTime 属性使用内置验证。

[Required]
public DateTime Date { get; set; }
Run Code Online (Sandbox Code Playgroud)

我如何才能只接受 DateTime 值 >= DateTime.Now?

c# datetime asp.net-core blazor-server-side

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