c# - 基于属性的路由问题不起作用
问题描述
我遇到了基于属性的路由不起作用的问题。我已经设置了我的前缀 ( http://localhost:6600/api/camps/ATL2018/talks
),如下所示,并设置了默认路由,它似乎工作正常。
namespace TheCodeCamp.Controllers
{
[RoutePrefix("api/camps/{moniker}/talks")]
public class TalkController : ApiController
{
private readonly ICampRepository _repositiry;
private readonly IMapper _mapper;
public TalkController(ICampRepository repository, IMapper mapper)
{
_repositiry = repository;
_mapper = mapper;
}
[Route()]
public async Task<IHttpActionResult> Get(string moniker, bool includeSpeakers = false)
{
try
{
var results = await _repositiry.GetTalksByMonikerAsync(moniker, includeSpeakers);
return Ok(_mapper.Map<IEnumerable<TalkModel>>(results));
}
catch (Exception ex)
{
return InternalServerError(ex);
}
}
[Route("{id:int}")]
public async Task<IHttpActionResult> Get(string moniker,int id, bool includeSpeakers)
{
try
{
var result = await _repositiry.GetTalkByMonikerAsync(moniker, id, includeSpeakers);
if (result == null) return NotFound();
return Ok(_mapper.Map<TalkModel>(result));
}
catch(Exception ex)
{
return InternalServerError(ex);
}
}
}
}
这个问题是当我运行下面的 URL 时它返回 Not Found
http://localhost:6600/api/camps/ATL2018/talks/1
有一个关于 Id 1 的会谈,问题似乎是它甚至没有达到,[Route("{id:int}")]
因为我设置了一个断点,它返回 Not Found 而没有达到断点。
任何建议将不胜感激。
解决方案
在您的第二个Get中,您的参数includeSpeakers未在您的 Route 中提供,并且未设置为可选。我不确定您的问题是否来自那里,但我认为您定义第二个端点的方式可能会导致路由问题,因为您没有提供所有输入参数。
[Route("{id:int}")]
public async Task<IHttpActionResult> Get(string moniker,int id, bool includeSpeakers = false)
推荐阅读
- c# - 在c#中将类型字符串转换为long
- c - 如何总结文本文件中的所有数字?
- makefile - Buildroot 插件文件是为目标架构编译的,尽管稍后在 Makefile 中使用
- node.js - AWS API Gateway:403 Forbidden response to preflight OPTIONS request
- sql - Presto SQL 想在所有列上使用一个函数,如何不将它们一一列出?
- powershell - 暂时将powershell语言更改为英语?
- javascript - 如何在衣服上制作与原版相似的材料图案
- algorithm - 如何分析以下嵌套循环的时间复杂度以及 n 的计数值是多少?
- c# - 如何使用 Linq 从逗号分隔的字符串中查找匹配单词的项目?
- python-3.x - root 无法在 aws 中安装 python 包