小编Jay*_*Jay的帖子

Visual Studio 2022 有没有办法在命名空间之前和之后添加新行?

我正在使用 Visual Stuido 2022 来编写我的 C# 项目。

有没有一种方法可以使用(.editorconfig文件)在命名空间之前和之后添加新行来配置VS?

所以我的课程看起来像这样

using System;

namespace ProjectName.Tests;

public class Test
{
    
}

Run Code Online (Sandbox Code Playgroud)

代替

using System;
namespace ProjectName.Tests;
public class Test
{
    
}

Run Code Online (Sandbox Code Playgroud)

visual-studio visual-studio-2022

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

当用户未经身份验证时,ASP.NET Core 5 Web API 返回 404 代码而不是 401

我有一个基于 ASP.NET 5 框架和 Swagger UI 编写的 Web API。

当用户向任何端点发出经过身份验证的请求时,我会收到 404“就像框架将用户重定向到不存在的页面一样!” 如果框架由于未经授权的请求而自动重定向请求,我想更改该行为以返回 401 json 响应。如果没有,如何将 JSON 响应的响应代码从 404 更改为 401?

Startup 类如下所示

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();

    services.AddSwaggerGen(swagger =>
    {
        swagger.SwaggerDoc("v1", new OpenApiInfo
        {
            Version = "v1",
            Title = "Student Athlete Wellness Tracker API",
            Description = "API to provide data for the Student Athlete Wellness Trackers",

        });
        swagger.AddSecurityDefinition("basic", new OpenApiSecurityScheme()
        {
            Name = "Authorization",
            Type = SecuritySchemeType.Http,
            Scheme = "basic",
            In = ParameterLocation.Header,
            Description = "Basic Authorization header using …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-web-api asp.net-core asp.net5 asp.net-core-webapi

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

有没有办法将 Visual Studio 2022 中 .editorconfig 中的规则应用于整个解决方案?

我正在尝试将 Visual Studio 2022 用于C#我正在进行的项目。我在解决方案的根目录中创建了一个.editorconfig文件,在其中定义了我想要在解决方案中遵循的所有规则。现在,我希望有一种方法可以将所有这些规则应用于整个解决方案。

使用代码清理配置文件,我可以包含将在整个项目上执行的修复程序/规则。但是,就我而言,所有规则都在.editorconfig. 我不知道是否有办法将规则转换.editorconfig为修复程序。

如何强制 VS2022.editorconfig在我的整个解决方案上应用所有规则?

c# visual-studio visual-studio-2022

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

C# 有没有办法减少大数组中新字符串的分配?

我试图了解内存分配以及如何减少它们。

我创建了以下长列表进行测试

var list = new List<int>(Enumerable.Range(0, 1_000_000).ToArray());
Run Code Online (Sandbox Code Playgroud)

然后我循环它并打印一个像这样的字符串

for (var i = 0; i < list.Count; i++) 
{
    Console.WriteLine("Item # " + list[i]); 
}
Run Code Online (Sandbox Code Playgroud)

上一个循环生成了超过 200 万次分配。我相信该行"Item # " + list[i]产生了 200 万个分配。

**问题1**为什么在这种情况下会分配200万个字符串?是否list[i]必须作为字符串存储在堆中,这是 1 次分配,然后是另一个分配中的组合字符串,因此每个循环 2 次分配?

下一步我考虑使用字符串生成器来减少分配

var builder = new StringBuilder();
for (var i = 0; i < list.Count; i++)
{
    builder.Append("Item # ");
    builder.Append(list[i]);

    Console.WriteLine(builder.ToString());
 
    builder.Clear();
}
Run Code Online (Sandbox Code Playgroud)

上面的代码有 100 万次分配,是之前分配的一半。

但是,仍然有很多分配。

我知道字符串是 C# 中的不可变对象,每个字符串在堆中都有自己的分配。但是,有没有一种方法可以重用内存分配,以便我们可以创建 1 个字符串,然后在该循​​环内一遍又一遍地重用相同的分配?就我而言,一旦打印了字符串,我就不再需要它了。对我来说,重用相同的分配并更新它的值是安全的。

**问题2** 是否可以重复使用内存分配来减少分配量?

** 问题 3** …

c# memory memory-management

6
推荐指数
2
解决办法
346
查看次数

如何在 ardalis.Specification 库中定义选择器?

我正在尝试利用Ardalis.Specification库在我的 asp.net 6 项目中应用规范模式。

安装库后,我创建了以下规范

public class ProductByIdsSpec : Specification<Product, ProductMenuItem>
{
    public ClientRecordByIdsSpec(IEnumerable<int> ids)
    {
        if (ids == null || !ids.Any())
        {
            return;
        }

        Query.Where(x => ids.Contains(x.Id));


        // some how I need to map Product to ProductMenuItem so only the needed columns are pulled from the database.
    }

}
Run Code Online (Sandbox Code Playgroud)

我不想Product从数据库中提取每个值,而是只想通过将数据投影到ProductMenuItem. 上述规范返回以下错误

SelectorNotFoundException Ardalis.Specification.SelectorNotFoundException:规范必须定义选择器

如何定义实体(即Product)和结果对象(即ProductMenuItem)之间的映射?

我尝试添加Select()定义但给了我同样的错误

public class ProductByIdsSpec : Specification<Product, ProductMenuItem>
{
    public ClientRecordByIdsSpec(IEnumerable<int> ids)
    {
        if …
Run Code Online (Sandbox Code Playgroud)

c# specifications specification-pattern asp.net-core ardalis-specification

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

如何在 asp.net core WebApi 项目中使用带有 swagger 的 OData 过滤器?

我有一个使用 C# 在 ASP.NET 5/core 和 EntityFrameworkCore 之上使用 C# 编写的 Web API。

我正在使用OData在查询数据库时应用过滤器。

我需要手动将其应用ODataQueryOptions到我的DbSet<>以生成分页信息。

这是我的代码

[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{
    private readonly DbContext _db;

    public ProductsController(DbContext db)
    {
        _db = db;
    }

    [HttpGet]
    [EnableQuery(AllowedQueryOptions = AllowedQueryOptions.All, AllowedFunctions = AllowedFunctions.AllFunctions, MaxTop = 500)]
    public PagedProduct Search(ODataQueryOptions<Product> queryOptions)
    {
        // create a query for that would count the total rows
        var countQuery = queryOptions.ApplyTo(Repository.Query(),  AllowedQueryOptions.Top | AllowedQueryOptions.Skip) as IQueryable<Product>;

        // create a query …
Run Code Online (Sandbox Code Playgroud)

c# odata swagger asp.net-core asp.net-core-webapi

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

如何使用 Bootstrap 5 垂直对齐一行文本

我正在尝试将文本垂直对齐在行的中间。

以下是我所做的。垂直对齐不起作用。如何使文本在行中间垂直对齐?

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>


<div class="container-fluid">

  <div class="row align-middle" style="min-height: 500px;">
    <div class="col-6 bg-danger align-middle">
      LEFT/MIDDLE TEXT
    </div>

    <div class="col-6 bg-primary align-middle">
      RIGHT/MIDDLE TEXT
    </div>
  </div>

</div>
Run Code Online (Sandbox Code Playgroud)

html css twitter-bootstrap bootstrap-5

3
推荐指数
2
解决办法
9342
查看次数

如何在 ASP.NET Core 8 中获取键控服务字典

在 ASP.NET Core 8 中,我们可以选择使用密钥注册服务。通常,注入IEnumerable<ICustom>构造函数将返回ICustom.

但是,我如何解析服务的字典及其密钥?例如,IDictionary<string, ICustom>这样我就可以访问该服务及其密钥?

c# dependency-injection asp.net-core asp.net-core-8

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

使用docker镜像时如何更改MySQL的默认配置?

我有一个 MySQL 服务器,使用MySQL:8.0.21 镜像在 Ubuntu VPS 上的 docker 容器内运行。

我正在使用以下命令docker-compose.yml来启动服务器

version: "3"
services:
    mysql_server:
        image: mysql:8.0.21
        restart: always
        container_name: mysql_server
        environment:
            MYSQL_DATABASE: my_database
            MYSQL_USER: my_user
            MYSQL_PASSWORD: my_pass
            MYSQL_ROOT_PASSWORD: my_pass
        volumes:
            - mysql_server_data:/var/lib/mysql
            - /mysql/files:/etc/mysql/conf.d
Run Code Online (Sandbox Code Playgroud)

但是,我需要一种方法来设置 MySQL 的默认配置,而不是使用默认配置。

我尝试添加“命令line to thedocker-compose.yml”文件,如下所示。但这没有用。

version: "3"
services:
    mysql_server:
        image: mysql:8.0.21
        restart: always
        container_name: mysql_server
        environment:
            MYSQL_DATABASE: my_database
            MYSQL_USER: my_user
            MYSQL_PASSWORD: my_pass
            MYSQL_ROOT_PASSWORD: my_pass
        command: mysqld --innodb-buffer-pool-size=2.5G --innodb-log-file-size=512M
        volumes:
            - mysql_server_data:/var/lib/mysql
            - /mysql/files:/etc/mysql/conf.d
Run Code Online (Sandbox Code Playgroud)

conf.d我还尝试添加一个名为in的文件/mysql/files并向其中添加以下行,但这也不起作用

innodb_log_file_size = 512M …
Run Code Online (Sandbox Code Playgroud)

mysql docker

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

如何使用 C# 正确查找 America/Los_Angeles 的 TimeZoneInfo

我正在尝试使用 C# 获取 TimeZoneInfo。

我尝试使用TimeZoneInfo.FindSystemTimeZoneById("America/Los_Angeles");但失败并出现以下错误

System.TimeZoneNotFoundException:“在本地计算机上找不到时区 ID 'America/Los_Angeles'。”

如何使用 C# 正确查找 America/Los_Angeles 的 TimeZoneInfo?

c# timezone datetime

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