2016-10-13 4 views
0

Hallo, ich habe diesen Code meine api MethodeApi verloren verloren param

export class MessageService { 

    constructor(private http: Http) { 

    } 

    addMessage(textToSend: string) { 
     return this.http.post("/api/SendMessage", textToSend); //<- Everytime i have some text in textToSend and this is ok 
    } 
} 

Und nach meiner Api meine param laufen gleich

[HttpPost] 
[Route("/api/SendMessage")] 
public void SendMessage(string msg) //null value 
{ 
    //some code 
} 
+1

Natürlich wird es nicht jeden passieren, es ist ein Abfrageparameter Sie in Ihrer Methode anfordern – Tseng

Antwort

1

Mögliche Lösung 1 Sie erwarten zum Spiel:

addMessage(textToSend: string) { 
    let body = JSON.stringify({ textToSend }); 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 

    return this.http.post("/api/SendMessage/", body, options); 
} 

// Server side -1 
[HttpPost] 
[Route("/api/SendMessage")] 
public void SendMessage([FromBody]IDictionary<string, string> msg) 
{ 
    var textToSend = msg["textToSend"]; 
} 

// Or create a model and use it 

//Server side -2 
public class Model 
{ 
    public string textToSend { get; set; } 
} 
public void SendMessage([FromBody]Model model) 

Mögliche Lösung 2:

addMessage(textToSend: string) { 
    return this.http.post("/api/SendMessage/" + textToSend); 
} 

[HttpPost] 
[Route("/api/SendMessage/textToSend")] 
public void SendMessage(string textToSend) 
{ 
    //some code 
} 
+0

So versuche ich Lösung 2 und meine Komponente senden Wert als textToSend. – Recovery

+0

in Netzwerken, wenn ich auf Anfrage sehe ich sehe "api/SendMessage/someTextFromMyInput" – Recovery

+0

Weil es 'textToSend' an das Ende der URL angehängt, so wird es erwartet. Wenn du das nicht willst, probiere Lösung 1. Hast du Lösung-1 versucht? –

2

Ihre Controller-Aktion auf null ist, einen Abfrageparameter zu akzeptieren , kein Router Parameter oder Modell.

Wenn Sie einen Routenparameter akzeptieren möchten, müssen Sie ihn zur Route hinzufügen.

Wenn Sie ein Modell oder einen Wert im Body übergeben möchten, müssen Sie den Parameter mit dem Attribut [FromBody] kennzeichnen.

[HttpPost] 
[Route("/api/SendMessage")] 
public void SendMessage([FromBody]string msg) 
{ 
    MessageBox MsgBox = new MessageBox(); 
    MsgBox.AddMsgToMsgBox(msg); 
} 

Wenn Sie nichts definieren, erwartet, dass die Steuerung der Parameter als Abfrage /api/SendMessage?msg=someMessage übergeben werden (die Sie sollten in einem REST-Dienst nicht tun, da es nicht sehr „RESTful“ ist

+0

Jetzt funktioniert nicht mein Haltepunkt auf api Methode: < – Recovery

0

try

addMessage(textToSend: string) { 
    return this.http.post("/api/SendMessage", msg); //<- Everytime i have some text in textToSend and this is ok 
} 

änderte den Namen der variablen, die man in der Steuerung

+0

Sie kennen den Unterschied zwischen Typoskript welche läuft im Browser und C#, die auf dem Server läuft? – Tseng

+0

didnt realisierte war Typoskript, jetzt aktualisiert – hectordetroya84