我一直在尝试创建一个简单的 API,我设法使Get工作正常进行,但是每当我尝试使用它Post或Put无法使其工作时。
我正在尝试发布/放置一个 JSON 并将其作为字符串获取到我的控制器中。
我正在使用 Postman 和 Insomnia 进行测试(因为我在本地运行,所以我对两者都关闭了 SSL 验证)。
这是我的控制器:
[Route("backoffice/[controller]")]
[ApiController]
public class AddQuestionController : ControllerBase
{
private IQuestionRepository _questionRepository;
public AddQuestionController(IQuestionRepository questionRepository)
{
_questionRepository = questionRepository ?? throw new ArgumentNullException(nameof(questionRepository));
}
[ProducesResponseType((int)System.Net.HttpStatusCode.OK)]
[HttpPost]
public async Task<ActionResult> AddQuestion([FromBody] string question)
{
Question q = JsonConvert.DeserializeObject<Question>(question);
await Task.Run(() => _questionRepository.InsertOne(q));
return Ok();
}
}
Run Code Online (Sandbox Code Playgroud)
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "|a0b79872-4e41e975d19e251e.",
"errors": {
"$": …Run Code Online (Sandbox Code Playgroud) 我必须使用 .NET 7 新的速率限制中间件对公共端点实施速率限制。
现在我已经选择了固定窗口速率限制器。我在网上找到了许多不同的实现,但我发现在 IP/客户端上实现任何类型的过滤的唯一实现是使用我不想要的 globalLimiter 。
我有很多端点,并且我希望在 2 个公共端点上有 2 个不同的限制器。
我想要的是以下 2 个实现的混合,这允许我命名策略以仅在端点上实现它,并且速率限制为每个/客户端。
builder.Services.AddRateLimiter(options =>
{
options.AddFixedWindowLimiter("myRateLimiter1", options =>
{
options.AutoReplenishment = true;
options.PermitLimit = 1;
options.Window = TimeSpan.FromSeconds(30);
});
options.AddFixedWindowLimiter("myRateLimiter12", options =>
{
options.AutoReplenishment = true;
options.PermitLimit = 1;
options.Window = TimeSpan.FromSeconds(30);
});
});
Run Code Online (Sandbox Code Playgroud)
builder.Services.AddRateLimiter(options =>
{
options.GlobalLimiter = PartitionedRateLimiter.Create<HttpContext, string>(httpContext =>
RateLimitPartition.GetFixedWindowLimiter(
partitionKey: httpContext.User.Identity?.Name ?? httpContext.Request.Headers.Host.ToString(),
factory: partition => new FixedWindowRateLimiterOptions
{
AutoReplenishment = true,
PermitLimit = 1,
QueueLimit = 0, …Run Code Online (Sandbox Code Playgroud) DateTime2我想将 a和Time(7)值相加
DECLARE @createdAt datetime2 = '2023-03-11 23:08:56.990'
DECLARE @dayOffset time(7) = '04:00:00'
Run Code Online (Sandbox Code Playgroud)
因此,通过添加 2 个值,我最终会得到'2023-03-12 03:08:56.990'
最终我也想做同样的事情,但是通过减去,我会得到'2023-03-11 19:08:56.990'
我找到了添加这两个值的不同方法,但它总是删除时间部分DateTime
DECLARE @createdAt datetime2 = '2023-03-11 23:08:56.990'
DECLARE @dayOffset time(7) = '04:00:00'
SELECT
DATEADD(DAY, DATEDIFF(DAY, @dayOffset, @createdAt), CONVERT(DATETIME2, @dayOffset))
SELECT
DATEADD(DAY, DATEDIFF(DAY, COALESCE(@dayOffset, '00:00:00'), @createdAt), CONVERT(DATETIME2, COALESCE(@dayOffset, '00:00:00')))
Run Code Online (Sandbox Code Playgroud)
但两人都回来了2023-03-11 04:00:00.0000000。
执行此操作的正确方法是什么?