我正在将 ASP.NET Core API 项目从 v5 升级到 v6。
v5中的服务配置:
services.AddSwaggerGen();
Run Code Online (Sandbox Code Playgroud)
v6中的服务配置:
builder.Services.AddEndpointsApiExplorer(); // what is this?
builder.Services.AddSwaggerGen();
Run Code Online (Sandbox Code Playgroud)
什么是AddEndpointsApiExplorer?无论我是否添加,一切都会按预期进行。
我使用“ASP.NET API 版本控制”库。他们有关系吗?如果是这样,我必须同时使用两者,只使用库,还是现在不需要库?
c# swashbuckle asp.net-core aspnet-api-versioning asp.net-core-6.0
我使用 Nginx 作为反向代理。
这些标头有什么区别:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
Run Code Online (Sandbox Code Playgroud)
在一些文档/教程中,我看到两者都被使用,而在其他文档/教程中,只有第一个。
它们看起来很相似,所以我想了解它们有何不同以及我是否需要同时使用两者。
我想压扁string[][]成string[].
在几十个SO答案给出的建议是:[].concat(...arrays)。
但这给了我这个错误:
“string[]”类型的参数不可分配给“ConcatArray”类型的参数。
属性“切片”的类型不兼容。
类型 '(start?: number | undefined, end?: number | undefined) => string[]' 不能赋值给类型 '(start?: number | undefined, end?: number | undefined) => never[]' .
类型 'string[]' 不能分配给类型 'never[]'。
类型 'string' 不能分配给类型 'never'。
我尝试的另一种方法是:
let foo: string[][] = [["a", "b", "c"], ["a", "b", "c"], ["a", "b", "c"]];
let bar = [].concat(...foo);
Run Code Online (Sandbox Code Playgroud)
这给出了类似的错误:
“string[]”类型的参数不可分配给“ConcatArray”类型的参数。
为什么它对除我以外的所有人都有效?
后台服务的ASP.NET Core文档显示了许多实现示例。
有一个在计时器上启动服务的示例,尽管它是同步的。还有另一个异步示例,用于启动具有范围依赖项的服务。
我需要同时执行这两项操作:每 5 分钟启动一个服务,并且它具有范围内的依赖项。没有这样的例子。
我结合了这两个示例,但我不确定使用Timerasync 的安全方法TimerCallback。
例如
public class MyScheduler : IHostedService
{
private Timer? _timer;
private readonly IServiceScopeFactory _serviceScopeFactory;
public MyScheduler(IServiceScopeFactory serviceScopeFactory) => _serviceScopeFactory = serviceScopeFactory;
public void Dispose() => _timer?.Dispose();
public Task StartAsync(CancellationToken cancellationToken)
{
_timer = new Timer((object? state) => {
using var scope = _serviceScopeFactory.CreateScope();
var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
await myService.Execute(cancellationToken); // <------ problem
}), null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken …Run Code Online (Sandbox Code Playgroud) c# async-await asp.net-core asp.net-core-hosted-services asp.net-core-5.0
我理解asp-fallback-*标签助手的作用.我不明白的是如何.
例如:
<link rel="stylesheet"
href="//ajax.aspnetcdn.com/ajax/bootstrap/3.3.5/css/bootstrap.min.css"
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
asp-fallback-test-class="sr-only"
asp-fallback-test-property="position"
asp-fallback-test-value="absolute" />
Run Code Online (Sandbox Code Playgroud)
这将从CDN加载引导程序,并在CDN关闭时加载本地副本.
但它如何决定呢?我认为它会检查asp-fallback-test-class,asp-fallback-test-property和asp-fallback-test-value.但这些属性意味着什么?
如果我想从CDN上挂一些其他的库,我需要为那些提供一些东西,但我不知道该把它放在那里.
有很多这方面的例子,但是我找不到关于它是如何工作的解释.
更新
我并不是真的想了解标签助手的工作原理 - 它们是如何渲染的,等等.我试图了解如何为这些属性选择值.例如,jQuery回退脚本通常具有asp-fallback-test="window.jQuery"合理意义 - 它是测试jQuery是否已加载的测试.但是我上面展示的那些是完全不同的.如何选择它们?如果我想使用其他一些CDN交付的库,我需要为这些属性指定值...我会用什么?为什么选择那些引导程序?
更新2
要了解回退过程本身的工作原理以及这些标记的编写方式,请参阅@ KirkLarkin的回答.要了解使用这些测试值的原因,请参阅我的回答.
c# razor asp.net-core asp.net-core-tag-helpers asp.net-core-2.1
我正在使用节点8.10.0.
fs.readdir()返回文件名和子目录名称的数组,或. fs.Dirents[]
我无法让它发挥作用.这是一个简单的例子:
console.log(require("fs").readdirSync("/", {withFileTypes:true}));
Run Code Online (Sandbox Code Playgroud)
这给了我一个字符串数组(例如["bin", "mnt", "usr", "var", ...]),而不是一个fs.Dirent对象数组(这就是我想要的).
我如何让它工作?
我使用 vscode 的原始设置编辑器 ( "workbench.settings.editor": "json"),因为它给了我更多的控制权。
问题是左侧的树 - 包含内部设置和扩展设置 - 未按字母顺序排序。非常难用。
在 vscode 存储库中,他们表示不会修复该问题,因为他们将重点放在新的 UI 上。
一定有办法对其进行排序。有谁知道如何(除了编写新的扩展)?
在 ASP.NET Core 5 中,模板在launchSettings.json以下位置提供:
"MyProject": {
"commandName": "Project",
"dotnetRunMessages": "true", // <<<<<<<<
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
Run Code Online (Sandbox Code Playgroud)
dotnetRunMessages没有记录在任何地方。它有什么作用?
我在日志中使用“跟踪 ID”。关于 aspnet repo 和此处的建议是从HttpContext.TraceIdentifier.
但是,当框架ProblemDetails为验证失败创建时,它会使用Activity.Current?.Id.
例子:
var traceId1 = Activity.Current?.Id; // OWZ4G27FO6UWH:00000003
var traceId2 = HttpContext.TraceIdentifier; // 00-2a8ee37903e657e3a95b41178dafc56e-91b02006afcf3133-00
Run Code Online (Sandbox Code Playgroud)
我担心我的日志使用一种类型的跟踪 ID,而框架使用另一种类型 - 当我发现自己需要分析日志时,我就会遇到问题。
这些有何不同?我应该使用哪个?该框架通常使用哪种类型?
我也询问了回购协议,他们没有任何解释就关闭了它。如果您有时间,请打开一个新问题,并向我们提供链接,以便我们对您的问题进行投票。
asp.net-core ×5
c# ×4
node.js ×2
angular ×1
asp.net-core-hosted-services ×1
async-await ×1
bcrypt ×1
encryption ×1
fs ×1
http ×1
http-headers ×1
javascript ×1
nginx ×1
razor ×1
settings ×1
swashbuckle ×1
typescript ×1