小编Smi*_*727的帖子

将 Blazor 应用程序部署到 IIS 子应用程序

我正在尝试在 /app 下部署我的 Blazor 服务器应用程序,它是 IIS 中的一个子应用程序。我在网上的几个地方读到我需要设置以下内容:

Startup.cs | app.UsePathBase("/app")
Run Code Online (Sandbox Code Playgroud)

_Host.cshtml | <base href="~/app/" />
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,我收到以下错误:

blazor.server.js:15 [2020-05-26T16:16:11.796Z] Error: The circuit failed to initialize.
e.log @ blazor.server.js:15
blazor.server.js:1 [2020-05-26T16:16:11.798Z] Information: Connection disconnected.
blazor.server.js:1 Uncaught (in promise) Error: Invocation canceled due to the underlying connection being closed.
    at e.connectionClosed (blazor.server.js:1)
    at e.connection.onclose (blazor.server.js:1)
    at e.stopConnection (blazor.server.js:1)
    at e.transport.onclose (blazor.server.js:1)
    at e.close (blazor.server.js:1)
    at e.stop (blazor.server.js:1)
    at e.<anonymous> (blazor.server.js:1)
    at blazor.server.js:1
    at Object.next (blazor.server.js:1)
    at a (blazor.server.js:1)
Run Code Online (Sandbox Code Playgroud)

如果我更改为(不带斜杠)

_Host.cshtml | <base …
Run Code Online (Sandbox Code Playgroud)

c# iis path asp.net-core blazor

7
推荐指数
1
解决办法
1235
查看次数

Blazor WebAssembly - 用户帐户和身份服务器的最佳实践

我正在尝试在我的软件中创建一个基本的用户管理模块,并且我已按照本指南创建该模块:

https://learn.microsoft.com/en-us/aspnet/core/blazor/security/web assembly/hosted-with-identity-server?view=aspnetcore-5.0&tabs=visual-studio

我想这是微软推荐的最佳实践。但是,我不明白以下内容:

  1. 授权服务器端的部分内容是否得到处理?我想确保没有任何部分(或最少部分)在服务器端呈现,并且授权应主要在 API 调用中进行,因为我使用的是 Blazor WebAssembly。所以我想知道为什么我们可以指定 .cshtml 文件等,因为我认为这是服务器端渲染的代码。
  2. 在指南中,他们多次引用了 IdentityServer(似乎是第三方软件组件)。我正在构建的应用程序是一个商业应用程序。我有义务购买 IdentityServer 许可证吗?如果是,微软是否有推荐的免费方法来做同样的事情?
  3. IdentityServer和IdentityServer4有什么区别?
  4. 我最终想要做的是一个 Microsoft 最佳实践模块,该模块允许管理员创建和处理具有不同角色并可以访问 Blazor WebAssembly 项目不同部分的用户。也许还有其他直接的方法可以做到这一点?今天的最佳实践是什么?

c# user-management identityserver4 blazor blazor-webassembly

5
推荐指数
1
解决办法
1238
查看次数

Blazor NSwag Newtonsoft.Json 到 System.Text.Json

我使用以下代码为我的 Blazor WebAssembly 项目生成 C# 客户端 API。

using (HttpResponseMessage response = client.GetAsync("https://localhost:5001/swagger/v1/swagger.json").Result)
{
    using (HttpContent contentapi = response.Content)
    {
        var json = contentapi.ReadAsStringAsync().Result;
        var document = await OpenApiDocument.FromJsonAsync(json);

        var settings = new CSharpClientGeneratorSettings
        {
            ClassName = "Client",
            CSharpGeneratorSettings =
            {
                Namespace = "MyProjectClient",
            }
        };

        var generator = new CSharpClientGenerator(document, settings);
        var code = generator.GenerateFile();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想从 Newtonsoft.Json 迁移到 System.Text.Json,因为我在一些较大的 API 请求中遇到非常慢的反序列化(长达几秒)。

我在网上找到了一些迁移指南,但我想继续使用上面的 NSwag 工具链来生成我的 API 客户端,因为否则它工作得非常好。有谁知道如何告诉 NSwag 工具链使用 System.Text.Json 而不是 Newtonsoft.Json?

c# asp.net-core nswag blazor system.text.json

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

AutoMapper:DTO和实体之间的映射

我正在使用 ASP.NET Core WebAPI,我想为名为“Item”的对象执行 CRUD。我正在使用 EF Core 来处理 SQL 数据库,并且有两个模型来代表我的对象。

  1. ItemDto - 项目的数据传输对象
  2. ItemEntity - 数据库对象(代表表 1:1 中的一行)

我的 HTTP GET one 和 HTTP GET much 方法的工作方式如下

  1. 获取 ItemRepository 实例

  2. 获取一个或多个ItemEntity

  3. 使用 AutoMapper将其映射到ItemDto这在我的构造函数中初始化,例如

    m_itemDtoMapper = new Mapper(new MapperConfiguration(cfg => cfg.CreateMap<ItemEntity, ItemDto>()));
    
    Run Code Online (Sandbox Code Playgroud)

在我的 WebAPI 方法中,我使用以下行将其映射到 ItemDto(对于 GET 许多情况):

var itemDtos = m_itemDtoMapper.Map<IEnumerable<ItemEntity>, ICollection<ItemDto>>(items);
Run Code Online (Sandbox Code Playgroud)

这很有效,并且 AutoMapper 非常强大。我现在的问题是:

  1. 这是管理数据库实体和数据传输对象之间关系的标准方法吗?
  2. 在CreateItem方法中,我需要进行反向映射。我不需要将 ItemEntity 映射到 ItemDto,而是需要将 ItemDto 映射到 ItemEntity。我该怎么做?仅使用切换的实体创建映射器的副本是可行的,但这应该是如何完成的吗?即两个映射器。

c# automapper asp.net-web-api .net-core asp.net-core

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