我正在尝试构建一个服务,根据用户的输入从数据库中选择所有城市名称。
我试着通过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
如果需要任何其他信息,请发表评论,我会添加。
答案 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路径。+