2015-08-12 4 views
5

In Web Api 2.2, könnten wir den Standort Header URL zurückkehren, indem Sie von der Steuerung zurückkehrt wie folgt:MVC 6 Web Api: Die Lösung der Location-Header auf eine 201 (Erstellt)

return Created(new Uri(Url.Link("GetClient", new { id = clientId })), clientReponseModel); 

Url.Link(..) würde die Ressourcen-URL beheben

Location header

In ASP.NET MVC 5 6 Web-Api, hat Url nicht im Rahmen existieren, aber die CreatedResult const: auf dem Controller-Namen GetClient entsprechend basiert ructor hat den Standort Parameter haben:

return new CreatedResult("http://www.myapi.com/api/clients/" + clientId, journeyModel); 

Wie kann ich diese URL lösen diese, ohne es manuell zu liefern, wie wir in Web API 2.2 getan hat?

Antwort

6

Ich wusste es nicht, aber die CreatedAtAction() Verfahren sorgen dafür:

return CreatedAtAction("GetClient", new { id = clientId }, clientReponseModel); 

Stellen Sie sicher, dass Ihr Controller von MVC-Controller leitet.

2

Es gibt eine UrlHelper Klasse, die IUrlHelper Schnittstelle implementiert. Es bietet die angeforderte Funktionalität.

Source code

0

Meine GET Aktion hat einen Routennamen

[HttpGet("{id:int}", Name = "GetOrganizationGroupByIdRoute")] 
    public async Task<IActionResult> Get(int id, CancellationToken cancellationToken = default(CancellationToken)) 
    { 
     ... 
    } 

Und meine POST-Aktion verwendet diesen Weg Namen der URL

[HttpPost] 
    public async Task<HttpStatusCodeResult> Post([FromBody]OrganizationGroupInput input, CancellationToken cancellationToken = default(CancellationToken)) 
    { 
     ... 
     var url = Url.RouteUrl("GetOrganizationGroupByIdRoute", new { id = item.Id }, Request.Scheme, Request.Host.ToUriComponent()); 
     Context.Response.Headers["Location"] = url; 
     ... 
    } 

resultierende Reaktion mit Fiddler enter image description here

Hoffnung zurückzugeben, das hilft .

-1

Ich benutze diese einfache Annäherung auf der Grundlage der Uri auf dem Web-Server bedient werden:

[HttpPost] 
[Route("")] 
public IHttpActionResult AddIntervencion(MyNS.MyType myObject) { 
    return Created<MyNS.MyType>(Request.RequestUri + "/" + myObject.key, myObject); 
} 
+1

Sie können einfach [HttpPost ("")] tun. nur eine kleine Abkürzung, die ich hinzufügen wollte. – Dblock247

3

Im neuen ASP.NET MVC-Core eine Eigenschaft gibt es Url, die eine Instanz von IUrlHelper zurückgibt. Sie können es verwenden, um eine lokale URL zu generieren, indem Sie folgend verwenden:

[HttpPost] 
public async Task<IActionResult> Post([FromBody] Person person) 
{ 
    _DbContext.People.Add(person); 
    await _DbContext.SaveChangesAsync(); 

    return Created(Url.RouteUrl(person.Id), person.Id); 
} 
Verwandte Themen