【问题标题】:Web API HttpPost body with spaces and quotes带有空格和引号的 Web API HttpPost 正文
【发布时间】:2014-04-11 02:53:23
【问题描述】:

我想创建一个 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 对象中......或者我可以对字符串进行一些转义,但第一个看起来很难看/不必要的,第二个似乎我会试图破解我不太了解的行为。

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-web-api asp.net-mvc-5


    【解决方案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 传输数据: 应用程序/json 和 { "foo": "bar", "baz": "moe" } JSON 序列化,不幸的是一些 Web 服务器语言——尤其是 PHP——不要本机反序列化。

    http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/

    【讨论】:

      猜你喜欢
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      相关资源
      最近更新 更多