gpt4 book ai didi

c# - AuthorizationPolicy设置状态码

转载 作者:行者123 更新时间:2023-12-03 13:48:26 25 4
gpt4 key购买 nike

我有一个AuthorizationHandler,我现在想返回一个自定义状态代码(或文本),我只是想使其返回429(这是速率限制,但不相关)

public class ReCaptchaHandler : AuthorizationHandler<ReCaptchaRequirement>
{
private readonly ReCaptcha _reCaptcha;
private readonly IHttpContextAccessor _accessor;

public ReCaptchaHandler(ReCaptcha reCaptcha, IHttpContextAccessor accessor)
{
_reCaptcha = reCaptcha;
_accessor = accessor;
}
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
ReCaptchaRequirement requirement)
{

context.Fail();
_accessor.HttpContext.Response.StatusCode = 429;
return Task.CompletedTask;
}
}

public class ReCaptchaRequirement : IAuthorizationRequirement
{
}

如您所见,我正在尝试使用 _accessor.HttpContext.Response.StatusCode = 429;设置状态= 429

我尝试过使用 var filterContext = context.Resource as AuthorizationFilterContext;filterContext.HttpContext中的http上下文

我按照以下方式创建我的政策
services.AddSingleton<IAuthorizationHandler, ReCaptchaHandler>();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddAuthorization(options =>
{
options.AddPolicy("ReCaptcha",
policy => policy.Requirements.Add(new ReCaptchaRequirement()));
});

该代码将运行并保护标有 [Authorize(Policy = "ReCaptcha")]的路由,但是除非我抛出异常,否则状态始终为400。

最佳答案

如果按以下方式设置StatusCode,则它可以正常工作

context.Fail();
var Response = filterContext.HttpContext.Response;
var message= Encoding.UTF8.GetBytes("ReCaptcha failed");
Response.OnStarting(async () =>
{
filterContext.HttpContext.Response.StatusCode = 429;
await Response.Body.WriteAsync(message, 0, message.Length);
});

关于c# - AuthorizationPolicy设置状态码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44135817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com