Dentro il mio ASP.NET Nucleo app che hanno un azione di controllo come questo:ASP.NET core "CreatedAtRoute" Il fallimento
[HttpPost]
public async Task<IActionResult> CreateSubscriber([FromBody] SubscriberDef subscriber)
{
//...implementation removed
var link = Url.Link("SubscriberLink", new { id = subscriber.ID });
return Created(link, null);
}
Il codice precedente funziona come previsto. Tuttavia, se uso il metodo "CreatedAtRoute" built-in, allora ottengo un'eccezione:
[HttpPost]
public async Task<IActionResult> CreateSubscriber([FromBody] SubscriberDef subscriber)
{
//...implementation removed
return CreatedAtRoute("SubscriberLink", new { id = subscriber.ID });
}
L'eccezione è:
System.InvalidOperationException: Nessun percorso corrisponde ai valori forniti.
L'eccezione fa sì che il servizio restituisca un codice di stato 500.
In entrambi i casi è lo stesso percorso, quindi non so perché il primo esempio funzioni correttamente e il secondo no.
mio project.json
contiene questo:
"frameworks": {
"dnx46": { },
"dnxcore50": { }
},
Per l'amor di riferimento, il percorso di nome è composto da due pezzi. In primo luogo è il prefisso di controllo:
[Route("api/[controller]")]
public class SubscribersController : Controller
{
// ...
}
In secondo luogo è l'azione GET, dove l'attuale percorso "SubscriberLink"
prende il nome:
[HttpGet("{id}", Name = "SubscriberLink")]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(Subscriber))]
public async Task<IActionResult> GetSubscriber(Guid id)
{
//...implementation removed...
return Ok(subscriber);
}
Pensieri?
Dove è definito il nome della route 'SubscriberLink'? – haim770
@ haim770 È definito nell'ultimo spezzone di codice. –
'var link = Url.Link (" SubscriberLink ", nuovo {id = subscriber.ID});' restituisce l'Url corretto o semplicemente non genera un'eccezione? – haim770