ASP.Net Core Web API 中的路由

5

我有一个Web API控制器,其中有一个名为GetHeroes()的方法,但前端没有调用它。我可以让一个简单的Get()方法工作,但似乎没有办法命名方法并调用这些方法。

CharactersController.cs

[Route("api/{controller}/{action}")]
public class CharactersController : Controller
{

    private readonly ICharacterRepository _characterRepository;

    public CharactersController(ICharacterRepository characterRepository)
    {
        _characterRepository = characterRepository;
    }


    [HttpGet]
    public IEnumerable<Character> GetHeroes()
    {
        return _characterRepository.ListAll().OrderBy(x => x.Name);
    }
}

data.service.ts

    getItems() {
    this.http.get('api/characters/getheroes').map((res: Response) => res.json()).subscribe(items => {
        this._collectionObserver.next(items);
    });
}
2个回答

12

您可以在HttpGet属性中指定路由和参数。您尝试过类似这样的方法吗?

[Route("api/[controller]")]
public class CharactersController : Controller
{
    ...

    [HttpGet("GetHeroes")] // Here comes method name
    public IEnumerable<Character> GetHeroes()
    {
        return _characterRepository.ListAll().OrderBy(x => x.Name);
    }
}

这是一篇关于路由的好文章: 在ASP.NET 5和ASP.NET MVC 6中自定义路由和操作方法名称


2

这适用于ASP.NET Core:

[HttpGet("{id}", Name = "GetHero")]
    public IActionResult GetById(string id)
    {
        var hero = Heroes.Find(id);
        if (hero == null)
        {
            return NotFound();
        }
        return new ObjectResult(hero);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接