使用$ http.delete从angular发布到aspnetcore api时不支持的媒体类型错误

时间:2016-09-02 18:41:13

标签: angularjs asp.net-core

发布到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; }
    }

1 个答案:

答案 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) {