gpt4 book ai didi

c# - ASP.NET Core 在 Forbid() 上给我代码 500

转载 作者:太空狗 更新时间:2023-10-29 18:24:26 24 4
gpt4 key购买 nike

我试了几个小时来解决这个问题,但我找不到任何东西。基本上我有一个简单的 Controller ,大致如下所示:

[Route("v1/lists")]
public class ListController : Controller
{
...

[HttpPost("{id}/invite")]
public async Task<IActionResult> PostInvite([FromBody] string inviteSecret, [FromRoute] int id, [FromQuery] string userSecret)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}

List list = await context.Lists.SingleOrDefaultAsync(l => l.ID == id);
if (list == null)
{
return NotFound();
}

User postingUser = await context.Users.SingleOrDefaultAsync(u => u.ID == list.CreationUserID);
if (postingUser == null || postingUser.Secret != userSecret)
{
return Forbid();
}

await context.ListInvites.AddAsync(new ListInvite{ListID = id, InviteSecret = inviteSecret});
await context.SaveChangesAsync();
return Ok();
}

....
}

事情是:每当调用此方法并通过 return Forbid(); 退出时,Kestrel 会在之后抛出 InvalidOperationException 消息

No authentication handler is configured to handle the scheme: Automatic

(当然服务器返回 500)。奇怪的是我没有在任何地方进行任何身份验证,而且它不会发生,例如如果方法以 return Ok(); 结束。在这一点上我真的迷路了,因为如果你尝试用谷歌搜索这个问题,你会得到解决方案而不是解决方案......对于那些实际进行身份验证并且有问题的人。我真的希望这里有人知道如何解决这个问题和/或我能做些什么来找出发生这种情况的原因。

最佳答案

SignInSignOutChallenge 一样,Forbid 依赖于身份验证堆栈来决定什么是正确的返回“禁止”响应的操作:一些身份验证处理程序(如 JWT 承载中间件)返回 403 响应,而其他人(如 cookie 中间件)更喜欢将用户重定向到“拒绝访问页面”。

如果您的管道中没有任何身份验证处理程序,则不能使用此方法。相反,请使用 return StatusCode(403)

关于c# - ASP.NET Core 在 Forbid() 上给我代码 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44597099/

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