415错误来自Angular的Web Api POST
花费数小时将简单的POST请求与Web API控制器进行对抗。415错误来自Angular的Web Api POST
Here's the response header from Postman:
Access-Control-Allow-Headers → Content-Type
Access-Control-Allow-Methods → GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin → *
Cache-Control → no-cache
Content-Length → 2153
Content-Type → application/json; charset=utf-8
Date → Wed, 04 Nov 2015 23:26:14 GMT
Expires → -1
Pragma → no-cache
Server → Microsoft-IIS/10.0
X-AspNet-Version → 4.0.30319
X-Powered-By → ASP.NET
X-SourceFiles → =?UTF-8?B?QzpcVXNlcnNcSnVsaWFcRG9jdW1lbnRzXFZpc3VhbCBTdHVkaW8gMjAxM1xQcm9qZWN0c1xUd2lsZHlcQVBJXGFwaVxUZXN0XHRlc3Rc?=
我尝试这两种方法POST没有成功:
-
[Route("api/{Test}/test")] [HttpPost] public void PostByProducts(Test t) { Console.Write(t.Name); }
更新:下面将被替换为合作德终于工作了。请注意,我添加了名称=“PostData”,它是控制器的名称。否则,获得“空引用”错误。 “数据数据”本身就是模型中的一个类。
[ResponseType(typeof(Data))]
[Route("api/{Test}/testpost/", Name="PostData")]
public IHttpActionResult PostData(Data data)
{
int rValue = 0;
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
else
{
if (data != null)
{
rValue = repo.PostTestMe(data);
}
else
{
return BadRequest();
}
}
return CreatedAtRoute("PostData", rValue, data);
}
在#1我的班 “测试” 总是在为空,而不管请求内容类型。我在Postman中尝试了所有这些,包括json。与发布更新后的代码现在(从角贴的时候,我得到空值旧)的角度作品太阅读一些SO答案,我并添加一个空的构造函数的模型类(“测试”)
在#2这里。当我从Postman发布时工作。
我在我的智慧结束。我想要做的就是从Angular发布一个简单的表单。
更新:现在它在邮差工作。我得到一个非空值到函数,并获得邮差这样的响应:
Access-Control-Allow-Headers → Content-Type
Access-Control-Allow-Methods → GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin → *
Cache-Control → no-cache
Content-Length → 1308
Content-Type → application/json; charset=utf-8
Date → Thu, 05 Nov 2015 03:15:26 GMT
Expires → -1
Pragma → no-cache
Server → Microsoft-IIS/10.0
X-AspNet-Version → 4.0.30319
X-Powered-By → ASP.NET
X-SourceFiles → =?UTF-8?B?QzpcVXNlcnNcSnVsaWFcRG9jdW1lbnRzXFZpc3VhbCBTdHVkaW8gMjAxM1xQcm9qZWN0c1xUd2lsZHlcQVBJXGFwaVx0ZXN0cG9zdA==?=
角码:(FORMDATA是直接从html表单中引用form.Field1,form.Field2等对应于C#模型类)
factory.postForm = function(formdata) {
return $http({
url: 'http://domain.com/api/test/testpost',
data: JSON.stringify(formdata),
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
}).success(function(response) {
console.log('posted ' + formdata)
});
}
(旧:仍然在API post函数中为null)一切工作正常。
最后更新:
平心而论,当我上传了我的源代码,其中居住在共享的主机上,并且API是相同的域下托管的直播服务器,只是不同的项目,一切运行良好,我得到了201创建好的响应。
因此,这是一个CORS问题,我想这非常有趣,因为GET请求在本地主机上一切正常,但是POST给我带来了困难。
顺便说一句,我结束了不使用[FromBody] - 它没有它的工作。
更新:结束将名称添加到路线。一切正常。
我以前经历过类似的问题,在我的案例中,在课堂参数解决了问题之前添加了[FromBody]。
在你的情况下,测试方法需要如下所示。
[HttpPost]
public IHttpActionResult PostTest([FromBody]Test test)
{
}
从FromUri和FromBody的详细说明可以找到here。
如果从角度发帖,仍然为空。 Postman邮局工作正常。 –
我想不知何故邮差避免了整个CORS的事情;也许它不会在任何Web服务器下运行,甚至是模拟的,或者它可能会将自身注入到运行api的本地主机中。 –
从这一行删除charset = utf-8 Content-Type→application/json; charset = utf-8 – Shohel
尝试使用和不使用字符集。同样的结果。 API中的空值。 –
请提及您的调用标题 – Shohel