作者:px9ctrl | 来源:互联网 | 2023-02-01 07:58
我试图解决这个问题几个小时,我找不到任何东西.基本上我有一个简单的控制器,大致如下所示:
[Route("v1/lists")]
public class ListController : Controller
{
...
[HttpPost("{id}/invite")]
public async Task 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
随后会抛出一条消息
没有配置身份验证处理程序来处理该方案:自动
(当然服务器返回500).令人奇怪的是,我在任何地方都没有进行任何身份验证,并且如果方法离开,则不会发生return Ok();
.我现在真的迷失了,因为如果你试图谷歌这个问题,你会得到解决方案而不是解决方案......对于那些真正认真并且有问题的人来说.我真的希望这边的人知道如何解决这个问题和/或我能做些什么来找出发生这种情况的原因.
1> Kévin Chalet..:
像SignIn
,SignOut
或者Challenge
,Forbid
依靠认证堆栈来决定什么是应该做回一个"禁止"响应正确的事情上:一些认证处理,如智威汤逊承载中间件返回一个403响应,而其他人-像饼干中间件-宁愿将用户重定向到"访问被拒绝的页面".
如果管道中没有任何身份验证处理程序,则无法使用此方法.相反,使用return StatusCode(403)
.