通过有角http.post的C#[HttpPost]字符串值变为空

时间:2019-03-28 06:28:13

标签: c# json angular angular7

我的C#post方法外观

[HttpPost]
public void mymethod(string id) {...}

我试图像这样从角度http.post发布字符串值,但该值到达null的C#方法。

const mystr = 'mystring';
this.http.post('myurl', mystr);

我尝试过的

{id: mystr}
JSON.stringify({id: mystr})

注意:使用[HttpGet("{id}")]发送id值效果很好,但是mystr可能包含'/'值,因此只要包含'/'都会失败。

当我将我的方法签名替换为([FromBody] string id)时,我得到400 Bad Request

3 个答案:

答案 0 :(得分:0)

对于您的情况,您需要进行一些小的更改,只需提供Model请求中要接收的POST数据即可。 像:-

public class CustomData {
   string id {get; set;}
}

然后调整您的API并使其意识到必须从request's body接收一些信息

所以,而不是

[HttpPost]
public void mymethod(string id) {...}

使用此

[HttpPost]
public void mymethod([FromBody] CustomData data) {...}

答案 1 :(得分:0)

您可以尝试按以下方式更改从angular发送的方式

const headers = new HttpHeaders({ 'Content-Type': 'application/json' });

this.http.post('myurl', 'string value', { headers: headers }) ;

如果“ applicaiton / json”不起作用,请尝试将其更改为“ application / x-www-form-urlencoded”

答案 2 :(得分:0)

在对角度的mystr上使用encodeValue。在C#API ID中,您应该获得解码后的值。

https://angular.io/api/common/http/HttpUrlEncodingCodec