ASP.NET Core无法进入端点方法吗?

时间:2018-11-13 23:54:06

标签: c# asp.net-core asp.net-core-webapi

我有一个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过滤器仅检查用户的租用权限以连接到端点。它也似乎运行良好(我也可以拦截它,并且在成功的情况下会将过滤器移出)。

1 个答案:

答案 0 :(得分:0)

正如@mjwills所建议的那样,在消除可能导致该行为的原因方面,我应该更加谨慎一些。我以为我了解了动作过滤器的行为方式,并且由于它似乎正在按照我的意愿进行操作,所以我知道不是问题,但实际上是问题。

删除所有可能的罪魁祸首,并有条不紊地将其重新加入...有时,这是查找问题的唯一方法。