Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET核心在禁止()上给我代码500_C#_Asp.net_Asp.net Web Api_Web_Asp.net Core - Fatal编程技术网

C# ASP.NET核心在禁止()上给我代码500

C# ASP.NET核心在禁止()上给我代码500,c#,asp.net,asp.net-web-api,web,asp.net-core,C#,Asp.net,Asp.net Web Api,Web,Asp.net Core,我花了几个小时试图解决这个问题,但什么也找不到。基本上,我有一个简单的控制器,大致如下所示: [Route("v1/lists")] public class ListController : Controller { ... [HttpPost("{id}/invite")] public async Task<IActionResult> PostInvite([FromBody] string inviteSecret, [FromRoute] int

我花了几个小时试图解决这个问题,但什么也找不到。基本上,我有一个简单的控制器,大致如下所示:

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

    ....
}
[路线(“v1/列表”)]
公共类ListController:Controller
{
...
[HttpPost(“{id}/invite”)]
公共异步任务PostInvite([FromBody]string inviteSecret,[FromRoute]int-id,[FromQuery]string userSecret)
{
如果(!ModelState.IsValid)
{
返回请求(ModelState);
}
List List=wait context.Lists.SingleOrDefaultAsync(l=>l.ID==ID);
if(list==null)
{
返回NotFound();
}
User postingUser=wait context.Users.SingleOrDefaultAsync(u=>u.ID==list.CreationUserID);
if(postingUser==null | | postingUser.Secret!=userSecret)
{
返回禁止();
}
wait context.ListInvites.AddAsync(新ListInviter{ListID=id,InviteSecret=InviteSecret});
wait context.saveChangesSync();
返回Ok();
}
....
}
问题是:每当调用此方法并通过
return bank()退出时
,Kestrel随后抛出一个
InvalidOperationException
,并显示消息

未配置任何身份验证处理程序来处理方案:自动


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

登录
注销
挑战
禁止
依赖身份验证堆栈来决定返回“禁止”的正确操作响应:一些身份验证处理程序(如JWT承载中间件)返回403响应,而另一些(如cookie中间件)更喜欢将用户重定向到“拒绝访问页面”


如果管道中没有任何身份验证处理程序,则不能使用此方法。相反,可以使用返回状态码(403)

,但它一直工作到今天。这个bug就在今天出现了,我当然没有改变我管道中的任何东西。除此之外,403(而不是401)不应该依赖于身份验证机制,因为您肯定改变了某些东西(否则您看到的异常不会神奇地出现)。值得注意的是,IIS集成帮助程序(
useisintegration()
)和WebListener主机都注册了默认的身份验证处理程序。你改变了吗?我从使用IIS集成改为只在开发时使用Kestrel支架,但是这个项目也通过Kestrel stand only在Linux AWS实例上运行,我可以向您保证,我昨天从它那里得到了一个403。我向您保证,如果您没有在管道中注册处理程序,
禁止
将无法工作。如果您不信任我,请随意查看源代码。@gentlecat您将最终得出以下代码行:。。。OSS真棒!