javascript – 非常简单AngularJS $http POST结果’400(错误请求)’和’无效HTTP状态代码400′

前端之家收集整理的这篇文章主要介绍了javascript – 非常简单AngularJS $http POST结果’400(错误请求)’和’无效HTTP状态代码400′前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个非常简单的.NET Web API托管在Azure中,有两个非常简单的方法
[EnableCors(origins: "http://simpleapiearl.azurewebsites.net",headers: "*",methods: "*")]
public class EnvelopesController : ApiController {
    // GET: api/Envelopes
    public IEnumerable<string> Get() {
        return new string[] { "value1","value2" };
    }

    // POST: api/Envelopes
    public string Post([FromBody]Envelope env) {
        return "rval: " + env + " (and my addition to env)";
    }
}

我创建了一个simple plunk调用这些方法.在我的AngularJS代码中,我正在做两个非常简单的$http调用. GET工作正常.然而,POST总是返回一个“400(Bad Request)”,紧接着在我的WebStorm控制台中,“XMLHttpRequestion无法加载… HTTP状态代码400无效”.

任何和所有的建议赞赏!

编辑!!

您好,感谢您的快速反应.我只是意识到我忘了添加一些非常相关的细节.

我的POST方法的参数是我称之为Envelope对象,它包含两个属性:listingId(int)和Description(string).当我添加urlencoded的Content-Type头文件,并将“{”listingId“:1234,”Description“:”some description“}’作为POST数据传递时,我的POST方法中的服务器上的env参数为NULL(即,似乎无法解析我提供的JSON).对不起,这从原来的帖子中被省略.

解决方法

我认为这篇文章会有所帮助.

How do I POST urlencoded form data with $http in AngularJS?

By default,the $http service will transform the outgoing request by
serializing the data as JSON and then posting it with the content-
type,“application/json”. When we want to post the value as a FORM
post,we need to change the serialization algorithm and post the data
with the content-type,“application/x-www-form-urlencoded”.

这是从你的修改的plnkr.您的代码缺少将JSON转换为编码的网址.

http://plnkr.co/edit/4aeEDz73qgHSfOv1sBgn?p=preview

$http({
    method: 'POST',url: 'http://simpleApiEarl.azurewebsites.net/api/envelopes',data: env,headers: {'Content-Type': 'application/x-www-form-urlencoded'},transformRequest: function(obj) {
      var str = [];
      for(var p in obj)
      str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
      return str.join("&");
    }
  }).

猜你在找的JavaScript相关文章