您好我有这个代码来运行我的api方法
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
}
}
在我的Api中,我的参数等于null
[HttpPost]
[Route("/api/SendMessage")]
public void SendMessage(string msg) //null value
{
//some code
}
答案 0 :(得分:2)
您的控制器操作正在接受查询参数,而不是路由器参数或模型。
如果要接受路由参数,则需要将其添加到路由中。
如果要在正文中传递模型或值,则必须使用[FromBody]
属性标记参数。
[HttpPost]
[Route("/api/SendMessage")]
public void SendMessage([FromBody]string msg)
{
MessageBox MsgBox = new MessageBox();
MsgBox.AddMsgToMsgBox(msg);
}
如果你没有定义任何东西,控制器希望参数作为查询/api/SendMessage?msg=someMessage
传递(你不应该在REST服务中做,因为它不是很好&#34;的RESTful&#34;
答案 1 :(得分:1)
可能的解决方案1:
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)
可能的解决方案2:
addMessage(textToSend: string) {
return this.http.post("/api/SendMessage/" + textToSend);
}
[HttpPost]
[Route("/api/SendMessage/textToSend")]
public void SendMessage(string textToSend)
{
//some code
}
答案 2 :(得分:0)
试
addMessage(textToSend: string) {
return this.http.post("/api/SendMessage", msg); //<- Everytime i have some text in textToSend and this is ok
}
更改变量的名称以匹配您在控制器中期望的名称