ASP.NET Core在Forbid上给我Code 500()

the*_*cat 9 c# asp.net web asp.net-web-api asp.net-core

我试图解决这个问题几个小时,我找不到任何东西.基本上我有一个简单的控制器,大致如下所示:

[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();
    }

    ....
}
Run Code Online (Sandbox Code Playgroud)

问题是:每当这个方法被调用并且它通过时return Forbid();,Kestrel InvalidOperationException随后会抛出一条消息

没有配置身份验证处理程序来处理该方案:自动

(当然服务器返回500).令人奇怪的是,我在任何地方都没有进行任何身份验证,并且如果方法离开,则不会发生return Ok();.我现在真的迷失了,因为如果你试图谷歌这个问题,你会得到解决方案而不是解决方案......对于那些真正认真并且有问题的人来说.我真的希望这边的人知道如何解决这个问题和/或我能做些什么来找出发生这种情况的原因.

Kév*_*let 13

SignIn,SignOut或者Challenge,Forbid依靠认证堆栈来决定什么是应该做回一个"禁止"响应正确的事情上:一些认证处理,如智威汤逊承载中间件返回一个403响应,而其他人-像饼干中间件-宁愿将用户重定向到"访问被拒绝的页面".

如果管道中没有任何身份验证处理程序,则无法使用此方法.相反,使用return StatusCode(403).