【发布时间】:2020-11-08 14:29:21
【问题描述】:
我遇到了基于属性的路由无法正常工作的问题。我已经设置了我的前缀 (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 而没有达到断点。
任何建议将不胜感激。
【问题讨论】:
-
参数列表与输入不匹配。在 C# 中,像 Get 这样的方法可以有多个具有不同数量参数的方法。所以它没有进入方法,因为参数与您定义的方法不同。
标签: c# asp.net-web-api routes