我想创建一个HttpPost控制器方法,该方法接受一个字符串,该字符串可能包含空格或单引号。我现在的代码如下:
[HttpPost]
[Route("ValidateExpression")]
public bool ValidateExpression([FromBody] string testExpression )
{
// ...
}
我通过JS(Angular)发布它,如:
$http.post(myRootUrl +'ValidateExpression', "'token1' || 'token2'");
我可以浏览JS并看到测试表达式是我所期望的,并且它在传出帖子的主体中看起来也很好(如Fiddler& Firebug中所见)。但是当我在服务器端的ValidateExpression的第一行中断点时,testExpression
被截断到第一个空格,并且被删除了引号,所以我收到的是token1
。
如何避免这种不必要的转变?
我想我可以创建一个模型来包装单个字符串,并将我的字符串作为字段值发送到与模型匹配的JSON对象中......或者我可以对字符串进行一些转义,但第一个看起来很难看/不必要的,第二个似乎是我试图破解我不太了解的行为。
答案 0 :(得分:1)
您需要使用等于参数名称的密钥传递JSON对象。
// POST api/values
public string Post(string value) {
return value;
}
$.post('/api/values', { value: 'Dave' });
或者,您可以通过以下方式满足Web API的编码要求:
$.post('api/values', "=" + value);
或
$.post('api/values', { '': value });
此处提供更多信息:http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/
编辑:
另外,请注意angualrjs http.post和jquery.post的行为有所不同:
区别在于jQuery和AngularJS如何序列化和传输 数据。从根本上说,问题在于您的服务器语言 选择无法理解AngularJS的传输 本地 - 这是一个耻辱,因为AngularJS当然没有做 哪里不对了。默认情况下,jQuery使用Content-Type传输数据: x-www-form-urlencoded和熟悉的foo = bar& baz = moe序列化。 但是,AngularJS使用Content-Type传输数据: application / json和{" foo":" bar"," baz":" moe" JSON 序列化,遗憾的是一些Web服务器语言 - 特别是 PHP-不要原生地反序列化。
http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/