我正在使用 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) 我有一个基于 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
我正在尝试将 Visual Studio 2022 用于C#我正在进行的项目。我在解决方案的根目录中创建了一个.editorconfig文件,在其中定义了我想要在解决方案中遵循的所有规则。现在,我希望有一种方法可以将所有这些规则应用于整个解决方案。
使用代码清理配置文件,我可以包含将在整个项目上执行的修复程序/规则。但是,就我而言,所有规则都在.editorconfig. 我不知道是否有办法将规则转换.editorconfig为修复程序。
如何强制 VS2022.editorconfig在我的整个解决方案上应用所有规则?
我试图了解内存分配以及如何减少它们。
我创建了以下长列表进行测试
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** …
我正在尝试利用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
我有一个使用 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) 我正在尝试将文本垂直对齐在行的中间。
以下是我所做的。垂直对齐不起作用。如何使文本在行中间垂直对齐?
<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)
在 ASP.NET Core 8 中,我们可以选择使用密钥注册服务。通常,注入IEnumerable<ICustom>构造函数将返回ICustom.
但是,我如何解析服务的字典及其密钥?例如,IDictionary<string, ICustom>这样我就可以访问该服务及其密钥?
我有一个 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) 我正在尝试使用 C# 获取 TimeZoneInfo。
我尝试使用TimeZoneInfo.FindSystemTimeZoneById("America/Los_Angeles");但失败并出现以下错误
System.TimeZoneNotFoundException:“在本地计算机上找不到时区 ID 'America/Los_Angeles'。”
如何使用 C# 正确查找 America/Los_Angeles 的 TimeZoneInfo?