小编Pla*_*pus的帖子

尝试调用控制器端点时“无法将 JSON 值转换为 System.String”

我一直在尝试创建一个简单的 API,我设法使Get工作正常进行,但是每当我尝试使用它PostPut无法使其工作时。
我正在尝试发布/放置一个 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)

c# rest .net-core asp.net-core

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

.NET 7 速率限制 - 客户端速率限制

我必须使用 .NET 7 新的速率限制中间件对公共端点实施速率限制。
现在我已经选择了固定窗口速率限制器。我在网上找到了许多不同的实现,但我发现在 IP/客户端上实现任何类型的过滤的唯一实现是使用我不想要的 globalLimiter 。
我有很多端点,并且我希望在 2 个公共端点上有 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)

.net c# filtering rate-limiting .net-7.0

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

T-SQL:将时间添加到 Datetime2

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

执行此操作的正确方法是什么?

t-sql sql-server datetime dateadd

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