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

时间:2017-04-26 09:12:58

标签: c# angularjs asp.net-mvc asp.net-web-api asp.net-core-webapi

在Angular中使用以上方式调用:

 function Login(email, password, callback)  
 {  
        var GetAll = new Object();  
        GetAll.email = email;   
        GetAll.password = email;  
        $http({  
            url: "http://localhost:52587/api/TokenAuth/Login",  
            dataType: 'json',  
            method: 'post',  
            data: JSON.stringify(GetAll),       
            headers: {
                      'Content-Type': 'application/json'
                      }      
         }) 
      .then(function loginSuccessCallback(response)
 {...

我使用swagger和ajax进行了测试,效果很好。我在体内设置了json对象(设置为raw和JSON(application / json))。

我编写了以下Web API:

namespace WEBAPI.Controllers  
{   
    public class user  
    {   
        public string email { get; set; }   
        public string password { get; set; }  
    }

 [Produces("application/json")]   
 [Route("api/[controller]")]       
 public class TokenAuthController : Controller    
 {

  [HttpPost("Login")]    
  public async Task`<IActionResult>` Login([FromBody]user usr)   
{   
..................               
..................             
}      
}         
}

但我得到[FromBody] 415不支持的媒体类型和 没有[FromBody]获取null参数。请帮帮我 谁知道我哪里出错?

2 个答案:

答案 0 :(得分:2)

没有必要JSON.stringify您的数据,因为您真正需要的是一个JSON对象。将您的数据作为字符串肯定会得到415(不支持的媒体类型)错误。 你可以这样做

$http({  
            url: "http://localhost:52587/api/TokenAuth/Login",  
            dataType: 'json',  
            method: 'post',  
            data: GetAll,       
            headers: {
                      'Content-Type': 'application/json'
                      }      
      }) 
 .then(function loginSuccessCallback(response)

答案 1 :(得分:0)

您可以尝试添加accept标题

 headers: {
       'Content-Type': 'application/json',
       'Accept':  'application/json'
 }