c# - 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
过滤器只是检查用户的租赁权限以连接到端点;它似乎也工作正常(我也可以拦截它,它在成功条件下离开过滤器)。
解决方案
正如@mjwills 所建议的那样,我应该更加小心地忽略可能或不可能导致这种行为的原因。我以为我理解动作过滤器的行为方式,并且由于它似乎在做我想要的,我知道这不是问题......但它确实是。
删除所有可能的罪魁祸首并有条不紊地将它们重新添加......有时这是找到问题的唯一方法。
推荐阅读
- r - R控制台调试器:我如何为每个步骤计时?
- php - 使用 php 中的表单在 Digital Ocean Storage Space 上上传文件
- java - 运行给定程序时显示编译错误
- android - 当android Kill 应用程序时会先调用onDestroy() 方法吗?
- javascript - 我如何匹配正则表达式中的单词,不区分大小写,正则表达式在双引号中
- gentics-mesh - Gentics Mesh - 从一个实例导入/导出项目到另一个实例
- c# - 动态类型可枚举和结构可枚举强制转换
- angular - 单个适配器上的角度材料日期过滤器
- python - 如何将 Json 数据插入 postgres 数据库
- python - 数据在页面之间拆分时使用 beautifulsoup 进行抓取