我对基于属性的路由不起作用有问题。我已经设置了前缀(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时,它会返回未找到的
http://localhost:6600/api/camps/ATL2018/talks/1有一个关于Id 1的谈判,问题似乎是它甚至没有击中[Route("{id:int}")],因为我对它设置了一个断点,并且它返回时没有碰到断点就没有找到。
如有任何建议,将不胜感激。
发布于 2020-11-08 14:40:33
在您的第二个Get中,您的参数不在您的路由中提供,也没有设置为可选。我不确定您的问题是否来自那里,但我认为定义第二个端点的方式可能会导致路由问题,因为您没有提供所有的输入are。
[Route("{id:int}")]
public async Task<IHttpActionResult> Get(string moniker,int id, bool includeSpeakers = false)https://stackoverflow.com/questions/64739223
复制相似问题