我有一个API控制器,其方法如下:
[HttpGet]
[Route("~/api/groups/{groupId}/feeds/{feedItemId}/flag")]
[FeedItemAccess(AccessLevelTypes.GroupMember, "groupId")]
public async Task<IActionResult> FlagFeedItem([FromRoute] int groupId, [FromRoute] long feedItemId)
{
try
{
await _feedManagementService.FlagMessage(groupId, feedItemId);
return Ok();
}
catch (Exception ex)
{
_logger.LogError(ex, "FlagFeedItem(int)");
return new OopsResult(ex);
}
}
我在await
线和_logger
线上设置了断点。然后我使用我的REST客户端以调试模式命中指定的端点(http://myhost/api/groups/1/feeds/1/flag)。
我立即得到一个空白的200响应......但await方法永远不会被击中,服务也不会被击中,而且我从未到达断点。我在摸不着头脑。我认为这是一个线程死锁问题,但实际上它返回200状态代码。
这可能是什么问题?路由似乎是正确的,我可以拦截控制器的构造函数,一切看起来很好......但是当它到达这里时,系统只是决定它实际上不需要做任何事情。
顺便说一下,FeedItemAccess
过滤器只是检查用户的租赁权限以连接到端点;它似乎工作正常(我也可以拦截它,并且它在成功条件下离开过滤器)。
正如@mwwills建议的那样,我应该更加谨慎地解除可能会导致这种行为的原因。我曾经以为我理解了动作过滤器应该如何表现,并且由于它似乎正在做我想要的,我知道这不是问题......但实际上它是。
删除所有可能的罪魁祸首并有条不紊地将它们添加回来......有时这是找到问题的唯一方法。