API服务似乎无法运作

时间:2017-09-03 14:11:34

标签: c# asp.net-core asp.net-core-mvc

我正在尝试构建一个服务,根据用户的输入从数据库中选择所有城市名称。

我试着通过Postman发送请求,但我得到了#34;无法得到任何回复" ,我不知道为什么。

我的API控制器:

[Route("city/{cityName}")]
public class CityController : Controller
{
    private ILogger<CityController> _logger;
    private IZipcodeRepository _repository;

    public CityController(ILogger<CityController> logger, IZipcodeRepository repository)
    {
        _logger = logger;
        _repository = repository;
    }

    [HttpGet("")]
    public IActionResult GetCities(string cityName)
    {
        //try
        //{
        //    var results = _repository.GetCitiesByCityName(cityName);
        //    return Ok(Mapper.Map<IEnumerable<CityViewModel>>(results));
        //}
        //catch (Exception ex)
        //{
        //    _logger.LogError($"Failed to get cities: {ex}");
        //    return BadRequest("Error occured");
        //}
        return new JsonResult(new List<object>()
        {
            new { id = 1, Name ="asd"},
            new { id = 2, Name ="dsa"}
        });

正如您所看到的,我标记了代码的一部分,以测试它是否是问题,但即使返回正常的JsonResult也不起作用。

在Postman中,我使用此链接:http:// *** / city / tel

如果需要任何其他信息,请发表评论,我会添加。

2 个答案:

答案 0 :(得分:0)

尝试在ActionResult而不是类上设置路由器。

答案 1 :(得分:0)

您无法在控制级别路由上获取参数名称{cityname},而是需要在操作级别进行映射。 Here's它应该如何运作:

  

要使属性路由重复性较低,控制器上的路由属性将与各个操作的路由属性相结合。控制器上定义的任何路径模板都会在路径模板上添加路径模板。在控制器上放置路由属性会使控制器中的所有操作都使用属性路由。

C#

[Route("products")]
public class ProductsApiController : Controller
{
   [HttpGet]
   public IActionResult ListProducts() { ... }

   [HttpGet("{id}")]
   public ActionResult GetProduct(int id) { ... }
}

在此示例中,URL路径/产品可以与ProductsApi.ListProducts匹配,URL路径/ products / 5可以与ProductsApi.GetProduct(int)匹配。这两个操作仅匹配HTTP GET,因为它们使用HttpGetAttribute进行修饰。 应用于以/开头的操作的路径模板不会与应用于控制器的路径模板结合使用。此示例匹配一组类似于默认路由的URL路径。+