2015-08-05 18 views
5

Ich versuche, die neue MVC 6 zu lernen. Ich habe das Microsoft MVC-Framework noch nie zuvor verwendet. Ich versuche, eine einfache Tutorial-Web-API zu verbessern, indem ich Links zu verschiedenen Aktionen meiner Controller hinzufüge, indem ich die URL (URL-Hilf) des Controllers verwende (Home-Controller, der zeigt, was die API kann). Aber wenn ich benutze:Generieren von Link mithilfe von URL-Hilfsprogramm in MVC 6-Controller (vNext)

this.Url.Action("Get", new {id = id}); 

erhalte ich einen Abfrage-String mit der URL. Ich hätte gerne eine entspanntere URL.

Ich dachte, bei der Verwendung der Attribute Routing, muss ich nicht eine bestimmte Route zuordnen, wie ich in alten Tutorials von WebApi sehe.

Muss ich eine Route zuordnen? Was muss ich tun, um einen ruhigeren URL-Stil zu erhalten?

Antwort

3

Sie können den Routenattributen in Ihrem Controller einen Namen hinzufügen und dann die Erweiterungsmethode IUrlHelper.RouteUrl verwenden, um die URL zu generieren.

Zum Beispiel angesichts der folgenden Web-api-Controller:

[Route("api/[controller]")] 
public class UsersController : Controller 
{ 
    // GET: api/users 
    [HttpGet] 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 

    // GET api/users/5 
    [HttpGet("{id}", Name ="UsersGet")] 
    public string Get(int id) 
    { 
     return "value"; 
    } 

    //additional methods... 
} 

Sie können die URL api/users/123 für die spezifische get von id Aktion erzeugen @Url.RouteUrl("UsersGet", new { id = 123 }) verwenden.

Das Problem bei der Verwendung der Erweiterungsmethode Url.Action ist, dass wenn Sie einen Controller wie im obigen Beispiel mit 2 Aktionen namens "Get" haben, dies die Route für die Aktion ohne Parameter verwenden und /api/Users?id=123 generieren. Wenn Sie jedoch diese Methode kommentieren, werden Sie sehen, dass @Url.Action("Get", "Users", new { id = 123 }) Ihnen auch die erwartete URL gibt.