Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Bei einer WebAPI das Objekt zurück geben, oder das Interface "IHttpActionResult"?
Ahrimaan
myCSharp.de - Member



Dabei seit:
Beiträge: 363
Herkunft: Thorn

Themenstarter:

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

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16145

beantworten | zitieren | melden

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) );
        }
}
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Ahrimaan
myCSharp.de - Member



Dabei seit:
Beiträge: 363
Herkunft: Thorn

Themenstarter:

beantworten | zitieren | melden

Hallo ihr beiden,

danke für eure Antworten

@Abt. Guter Einwand, wird so gemacht :)
private Nachricht | Beiträge des Benutzers