发布到aspnetcore api时,我收到415 http错误结果。 如果我的端点标有[HttpPost]而不是[HttpDelete]
,则不会发生这种情况在aspnetcore api控制器中:
[HttpDelete]
public async Task<IActionResult> Delete([FromBody]EntityViewModel vm)
{
在角度控制器中:
var obj = new Object();
obj.atr1 = 1;
obj.atr2 = 2 ;
$http.post(route, obj)
.then(function (response) {
EntityViewModel.cs
public class EntityViewModel
{
public int Atr1 { get; set; }
public int Atr2 { get; set; }
}
答案 0 :(得分:1)
首先阅读你的问题后,我有点困惑......
为什么$http.post
用于发出DELETE请求?为什么$http.delete
没有用于此目的?然后我阅读了更多关于AngularJS $http.delete
的内容,发现你无法将一个主体发送到服务器。然后我问自己,为什么你能在DELETE请求中发送一个正文。这里有一个很好的问题:Is an entity body allowed for an HTTP DELETE request? - 规范允许使用正文数据删除DELETE请求。
长话短说......
ASP.NET Core可以使用正文中发送的JSON数据处理DELETE请求。所以控制器部分是有效的。
[HttpDelete]
public async Task<IActionResult> Delete([FromBody]EntityViewModel vm)
{
为了避免状态代码415(不支持的媒体类型),将标题字段Content-Type
设置为application/json
非常重要。我在Postman作为客户端的实验中忘记了这一点,并获得了415状态代码。
对于AngularJS部分,我建议使用
var obj = new Object();
obj.atr1 = 1;
obj.atr2 = 2 ;
$http(
{
method: 'DELETE',
url: route,
headers: {
'Content-Type': 'application/json'
},
data: obj
}
).then(function (response) {