Laden...

Bei einer WebAPI das Objekt zurück geben, oder das Interface "IHttpActionResult"?

Erstellt von Ahrimaan vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.231 Views
A
Ahrimaan Themenstarter:in
350 Beiträge seit 2010
vor 7 Jahren
Bei einer WebAPI das Objekt zurück geben, oder das Interface "IHttpActionResult"?

Hallo zusammen,

bei uns hat sich gerade ein Streit um eine, meiner Meinung nach Glaubensfrage, entfacht:

WebAPI2 , was gebe ich zurück ?

Variante 1 : IHttpactionResult

public IHttpActionResult Post([FromBody] SearchModel model){
try{
 return Ok();
}
catch(Exception ex)
{
return InternalServerError(ex);
}
   

}

oder das richtige Model

public ResultModel Post([FromBody] SearchModel model)
        {
            try
            {
                var result  = this._client.GetData(model.data);
                return result;
            }
            catch (Exception ex)
            {
                this.log.Error(ex);
                throw;
            }
        }

Gibt es Vor- und/oder Nachteile (außer evtl. Unit Testing) ?
Danke für eure Meinung

VG

2.207 Beiträge seit 2011
vor 7 Jahren

Hallo Ahrimann,

gib das dafür vorgesehene IHttpactionResult zurück. Dies stellt genau das dar, was zurückgeschickt wird, nämlich eine HTTP-Response. Mit Statuscode, Body, etc.

Gibst du eine Ressource zurück wird ebenfalls der Statuscode 200 rauskommen. Spätestens aber bei 201 - Created müsstest du schauen, wie du das machst. Die richtigen Stauscodes sind enorm wichtig bei einer RESTful API.

Auch beim Testen kannst du gegen das Interface selber testen. Und brauchst die Resource nicht unbedingt kennen.

Damit es einheitlich ist und dargestellt wird, was die Methode zurück gibt, würde ich immer das IHttpactionResult verwenden.

Gruss

Coffeebean

16.834 Beiträge seit 2008
vor 7 Jahren

Coffeebean hats genau richtig erklärt..

.. und Deine Exceptions solltest Du mit Hilfe eines Action- oder ExceptionFilters loggen und nicht in jeder Methode einzeln.
Dadurch wird Deine Methode auch ein Einzeiler.

[MyCustomLoggingExceptionFilter]
public class MyController
{
        public IHttpActionResult Post([FromBody] SearchModel model)
        {
                return Ok( this._client.GetData(model.data) );
        }
}
A
Ahrimaan Themenstarter:in
350 Beiträge seit 2010
vor 7 Jahren

Hallo ihr beiden,

danke für eure Antworten

@Abt. Guter Einwand, wird so gemacht 😃