首页 > 解决方案 > ASP.NET Core 无法进入端点方法?

问题描述

我有一个 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过滤器只是检查用户的租赁权限以连接到端点;它似乎也工作正常(我也可以拦截它,它在成功条件下离开过滤器)。

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

解决方案


正如@mjwills 所建议的那样,我应该更加小心地忽略可能或不可能导致这种行为的原因。我以为我理解动作过滤器的行为方式,并且由于它似乎在做我想要的,我知道这不是问题......但它确实是。

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


推荐阅读