2017-12-26 4 views
2

Ich habe ein Beispiel für Post mehrere Parameter in HTTP-Anfrage.Aber ich kann nicht den Wert in Web-API-Controller zuweisen. Bitte überprüfen Sie den folgenden Code.Mehrere Parameter in HTTP-Post-Anfrage nicht Binding in Asp.net webApi 2.0

.ts

deleteEntry(entryId: number, entryActiveFlag: string): Observable<number> { 
     let dataUrl = `http/localhost:8080/Entry/DeleteEntry`; 
     let params = { entryId, entryActiveFlag}; 
     //params.append(entryId); 
     //params.append('entryActiveFlag', entryActiveFlag); 
     let body = JSON.stringify(params); 
     return this.http.post(dataUrl, body) 
      .map(res => res.json()) 
      .catch(this.handleError); 
    } 

.WebApi

[HttpPost("DeleteEntry")] 
    public IActionResult DeleteEntry([FromBody]int entryId,string entryActiveFlag) 
    { 
     return Ok(_service.DeleteEntry(entryId, entryActiveFlag)); 
    } 
+0

Was ist die Antwort zu Ihrer Anfrage? Führt es zu einem Fehler? Wird DeleteEntry tatsächlich getroffen? –

+0

@RuardvanElburg Ja, DeleteEntry wurde getroffen, aber der Sendewert ist in den Parametern nicht bindend. Die entryId wird als 0 und entryActiveFlag als null erhalten. – user7399938

Antwort

0

Wickeln Sie die Eingabe Details in einer Klasse und geben Sie das Klassenobjekt als Parameter Web-API-Methode. In Ihrem Fall können Sie unter Klasse hinzufügen -

public class EntryDetails 
{ 
    public int EntryId {get;set;} 

    public bool EntryActiveFlag 

} 

Und Ihre Web-Methode wird

[HttpPost("DeleteEntry")] 
    public IActionResult DeleteEntry(EntryDetails entryDetails) 
    { 
     return Ok(_service.DeleteEntry(entryDetails.EntryId, entryDetails.EntryActiveFlag)); 
    } 

Dementsprechend auch den Aufruf von Client-Methode ändern.

+0

Ja, ich habe es bereits versucht, Es funktioniert gut, aber ich möchte wissen, wie Parameter übergeben werden. Warum wird der Parameter nicht übergeben? Ist ich irgendwo falsch oder aus irgendeinem anderen Grund? – user7399938

0

versuchen Code unten

let body = "entryId=23&entryActiveFlag=true"; 
let options = { 
    headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded') 
}; 
    return this.http.post(dataUrl, body,options) 
       .map(res => res.json()) 
       .catch(this.handleError); 

Oder Versuch unter Code

const formData = new FormData(); 
formData.append("key","value"); 
let options = { 
    headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded') 
}; 

return this.http.post(dataUrl, formData,options) 
      .map(res => res.json()) 
      .catch(this.handleError);