我在Azure中托管了一个非常简单的.NET Web API,它有两种非常简单的方法:
[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)"; } }
我创建了一个简单的插件来调用这些方法。在我的AngularJS代码中,我进行了两个非常简单的$ http调用。GET工作正常。但是,POST始终返回“ 400(错误请求)”,然后在WebStorm控制台中不久显示“ XMLHttpRequestion无法加载…无效的HTTP状态代码400”。
任何和所有建议表示赞赏!
编辑!!
您好,感谢您的快速回复。我只是意识到我忘了添加一些非常相关的细节。
我的POST方法的参数就是所谓的Envelope对象,其中包含两个属性:listingId (int)和Description (string)。当我添加urlencoded Content-Type标头,并'{"listingId":1234, "Description":"some description"}'作为POST数据传递时,服务器上POST方法中的env参数为NULL(也就是说,它似乎无法解析我提供的JSON)。抱歉,原始帖子中省略了此内容。
listingId (int)
Description (string)
'{"listingId":1234, "Description":"some description"}'
我认为这篇文章会有所帮助。
如何在AngularJS中使用$ http发布urlencode表单数据?
默认情况下,$ http服务将通过将数据序列化为JSON然后使用内容类型“ application / json”将其发布来转换外发请求。当我们想将值作为FORM发布时,我们需要更改序列化算法并使用内容类型“ application / x-www- form-urlencoded”发布数据。
这是您的修改后的plnkr。您的代码缺少将JSON转换为编码URL的转换。
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("&"); } }).