2017-01-05 5 views
0

Ich benutze asp.net webapi und benutze swagger um einen RestApi innerhalb einer WPF App über AutoRest zu erstellen. Ich habe Probleme herauszufinden, wie die zurückgegebenen Daten zu konsumieren, wenn es einen Fehler gibt.WebApi und Swagger

Mein Controller ist wie folgt;

// POST: api/Personnel 
    //[SwaggerResponse(HttpStatusCode.InternalServerError ,Type = typeof(HttpError))] 
    [SwaggerOperation("AddEditContract")] 
    [SwaggerResponse(HttpStatusCode.OK, Description = "Add/Edit a Contract", Type =typeof(int))]   
    public IHttpActionResult Post(ContractDto value) 
    { 
     try 
     { 
      var _contractsService = new Business.ContractsService(); 

      var contractToSave = _contractsService.GetContractsById(value.CC_Id); 

      if (contractToSave == null) 
      { 
       return NotFound(); 
      } 

      var ret = _contractsService.SaveContract(value); 

      if (ret > 0) 
      { 
       return Ok(ret); 
      } 
      else 
      { 
       return BadRequest(); 
      }     
     } 
     catch (Exception ex) 
     { 
      return InternalServerError(ex); 
     } 
    } 

Ich war zufällig ein Fehler erscheinen im WebAPI auf einen Fehler mit AutoMapper Basis haben, aber es war immer verschlungen. Es gibt eine Fehlermeldung in der Antwort, die groß ist.

Hier ist der aktuelle AutoRest-Code für diesen Anruf.

public static int? AddEditContract(this IBuxtedConAPI operations, ContractDto value) 
     { 
      return Task.Factory.StartNew(s => ((IBuxtedConAPI)s).AddEditContractAsync(value), operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); 
     } 

Wie Sie sehen können erwartet ein Int. Wenn ich die

//[SwaggerResponse(HttpStatusCode.InternalServerError ,Type = typeof(HttpError))] 

auskommentieren, wird der Int-Rückgabetyp zum Objekt.

Also die eigentliche Frage. Hier ist mein Service-Aufruf von WPF zum WebAPI

public async Task<int> SaveContract(ContractDto entity) 
    {   
     using (var db = new BuxtedConAPI()) 
     { 
      var ret = await db.AddEditContractAsync(entity); 
      return (int)ret; 
     } 
    } 

Wenn ein Objekt zurückgegeben wird, wie abhole ich, ob ein Fehler aufgetreten ist oder wenn die einfache int (mit Erfolg) wird nur zurückgegeben.

Vielen Dank im Voraus. Scott

Antwort

1

Können Sie die Swagger-Datei posten, die Sie generieren und an AutoRest übergeben?

Der Grund, warum der Rückgabetyp zu object wird (oder welche gemeinsame Basisklasse zwischen allen möglichen Antworten verwendet wird), liegt daran, dass AutoRest explizit definierte Antworten als Rückgabewerte behandelt. Ausnahmen werden nur für die Antwort default verwendet.

Wir untersuchen Möglichkeiten, mehrere Fehlerreaktionen anzugeben, die die entsprechenden Ausnahmen generieren.

+0

danke für das Zurück zu mir. – scottsanpedro

+0

Hallo Garrett. Schlägst du als endgültige Antwort vor? Wenn ja, werde ich akzeptieren. Ich wollte nur sicherstellen, dass ich nichts als ziemlich neu zu asp verpassen würde. Danke Scott – scottsanpedro

+0

Ja, Sie müssen ziemlich einfach die 'default' für Ihre Fehlerreaktionen verwenden, und AutoRest generiert Ausnahmen für diese. –