基于属性的路由不起作用的问题

福斯特90

我对基于属性的路由不起作用。我已经设置了前缀(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}")]当我为它设置一个断点时它甚至没有达到,并且在未达到断点的情况下返回Not Found。

任何建议将不胜感激。

伊斯梅尔·迪亚里(Ismail Diari)

在第二个Get中Route中未提供参数includeSpeakers,并且未将其设置为可选参数。我不确定您的问题是否来自那里,但我认为定义第二个端点的方式可能会导致路由问题,因为您没有提供所有输入参数。

[Route("{id:int}")]
public async Task<IHttpActionResult> Get(string moniker,int id, bool includeSpeakers = false)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章