2016-08-21 3 views
2

Ich habe einen Web-API-Controller mit einer Methode namens GetHeroes() und es wird nicht von der Front-End aufgerufen. Ich kann eine einfache Get() Methode zum Arbeiten bekommen, aber es scheint keine Möglichkeit zu geben, Methoden zu benennen und diese Methoden aufzurufen.ASP.Net Core-Routen mit Web-API

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); 
    }); 
} 

Antwort

8

können Sie angeben Route und Parameter in HttpGet Attribut. Hast du so etwas probiert?

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

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

Hier ist ein guter Artikel über Routing: Custom Routing and Action Method Names in ASP.NET 5 and ASP.NET MVC 6

1

Try Routing-Attribut über die API

[RoutePrefix("api/Characters")] 
public class CharactersController : Controller 
{ 

    private readonly ICharacterRepository _characterRepository; 

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

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

Notiz hinzufügen: vergewissern Sie sich von enabli ng MapHttpAttributeRoutes wie die

using System.Web.Http; 

namespace WebApplication 
{ 
    public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      // Web API routes 
      config.MapHttpAttributeRoutes(); 

      // Other Web API configuration not shown. 
     } 
    } 
} 
+2

Dies ist für MVC5 aber OP erwähnt asp.net-Kern in Titel. – Nkosi

1

Dies funktioniert für ASP.NET Kern:

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