2016-06-23 11 views
11

Qual è il vantaggio o la raccomandazione sull'uso di IActionResult come tipo di ritorno di un controller WebApi invece del tipo effettivo che si desidera restituire?Vantaggio dell'utilizzo di IActionResult come tipo di risultato in Azioni

La maggior parte degli esempi che ho visto restituiscono IActionResult, ma quando costruisco il mio primo sito uso esclusivamente le classi View Model come i miei tipi di ritorno .... ora mi sento come se avessi sbagliato tutto!

risposta

10

Il vantaggio principale è che è possibile restituire codici di errore/stato o reindirizzamenti/URL di risorse.

Ad esempio:

public IActionResult Get(integer id) 
{ 
    var user = db.Users.Where(u => u.UserId = id).FirstOrDefault(); 

    if(user == null) 
    { 
     // Returns HttpCode 404 
     return NotFound(); 
    } 

    // returns HttpCode 200 
    return ObjectOk(user); 
} 

o

public IActionResult Create(User user) 
{ 
    if(!ModelState.IsValid) 
    { 
     // returns HttpCode 400 
     return BadRequest(ModelState); 
    } 

    db.Users.Add(user); 
    db.SaveChanges(); 

    // returns HttpCode 201 
    return CreatedAtActionResult("User", "Get", new { id = user.Id}); 
} 
+0

anche unità di test –

+0

@KiranChalla Non capisco quello che si ottiene con 'IActionResult' che non possiamo ottenere con 'ActionResult', 'ActionResult' ci limita in qualche modo? Le altre risposte su Internet non sono così convincenti. –

+0

@HamidMosalla; Tecnicamente non molto, ma 'IActionResult' è un'interfaccia e' ActionResult' una classe astratta. Mentre tutti gli ActionResults di MVC ereditano da 'ActionResult', non è dato o garantito che alcune classi di risultati di azioni di terze parti facciano lo stesso, quindi è sempre meglio usare il tipo più basso possibile, qui:' IActionResult' – Tseng

0

Il vantaggio principale è che si può facilmente testare il codice utilizzando un quadro di scherno.

E mentre si costruiscono i controller, è possibile modificare facilmente anche l'oggetto di reso. IActionResult è un'interfaccia e ha molte implementazioni come JsonResult, ViewResult, FileResult e così via.

-2

sto per rendere i nostri ViewModels implementare IActionResult per ottenere il meglio dei due mondi :)

How to write custom actionResult in asp.net core

+0

è una cattiva idea? per favore non downvotare senza un commento. –

+0

Questa non è una risposta alla domanda dell'OP. – David

+0

Non sono d'accordo. Il punto è che puoi usare IActionResult con ViewModels mentre l'OP ha l'impressione che deve scegliere. –