2015-03-30 2 views
0

Web API Post parameters are always NullMVC4 Web API Сообщение Параметр Null

ASP.NET Web API POST parameter is null

То, что работало для этих людей, кажется, не будет работать для меня. У меня почти точно такая же настройка, но я все еще получаю нуль в своем втором контроллере. Первый работает отлично, но я не могу воспроизвести его во втором контроллере.

API вызова

$.ajax 
({ 
    type: "POST", 
    url: "http://localhost:52441/api/login", 
    data: { "Username": "test", "Password": "ptest" } 
}) 
.done(function (data) { 
    //var json = $.parseJSON(data); 
    console.log(data); 
}); 

класс Controller

public class LoginController : ApiController 
{ 
    public bool Post([FromBody]Creds creds) 
    { 
     return false; 
    } 
} 

кредитки класс

public class Creds 
{ 
    public string Username { get; set; } 
    public string Password { get; set; } 

    public Creds(string user, string pass) 
    { 
     this.Username = user; 
     this.Password = pass; 
    } 
} 

Как я уже сказал, это работает внутри другого контроллера (UsersController). Когда я проходил { "First_Name": "John", "Last_Name": "Doe" } Я правильно получаю объект «Пользователь» в методе «Почта» public void Post([FromBody]User user)

Что мне здесь не хватает?

+1

Не уверен, если это относится к веб-API, но это, конечно, не в состоянии в MVC, потому что у вас нет конструктора без параметров для 'Creds' –

+0

@StephenMuecke Спасибо за ответ! Я установлю один, но в моем первоначальном посте я упомянул, что у меня есть класс User, и он настроен точно так же, и он работает. Кроме того, я не уверен, объяснит ли это, почему мои параметры сообщения равны нулю? – fischgeek

+0

@StephenMuecke Святое дерьмо! Прошу прощения, я тебе не верил. Я бросил одного, чтобы посмотреть, и это сработало! Спасибо! – fischgeek

ответ

0

Try с измененным кодом ниже:

API вызовов:

$.ajax 
({ 
    type: "POST", 
    url: "http://localhost:52441/api/login/validate", 
    data: { "Username": "test", "Password": "ptest" } 
}) 
.done(function (data) { 
    //var json = $.parseJSON(data); 
    console.log(data); 
}); 

класс контроллера:

public class LoginController : ApiController 
{ 
    [HttpPost] 
    public bool Validate(Creds creds) 
    { 
     return false; 
    } 
} 

кредитки класс:

Без изменений.

+0

Простите, нет. Именно это предложил Стивен Муке. Спасибо за ваш ответ! – fischgeek

0

Следуйте ниже код

Web API класс Контроллер

public class LoginController : ApiController 
     { 
      public bool Validate([FromUri]Creds creds) 
      { 
       return false; 
      } 
     } 

кредитки класс

public class Creds 
{ 
    public string Username { get; set; } 
    public string Password { get; set; } 

    public Creds(string user, string pass) 
    { 
     this.Username = user; 
     this.Password = pass; 
    } 
} 

Либо использовать API Ajax вызов следующим образом

var RequestZipCode = { Username: "test", Password: "ptest" }; 
      $.ajax({ 
       type: "GET", 
       data: Creds, 
       url: "api/Name of the Controller/", 
       contentType: "application/json", 
       success: function (data){ 
        ShowData(data); 
      } 
      }); 

Создать клиентское приложение, которое будет вызывать WebAPI следующим образом

StringBuilder sbAPIRequest = new StringBuilder(); 
sbAPIRequest.Append("?Username=test"); 
       sbAPIRequest.Append("&Password=ptest"); 

       HttpWebRequest httpWReq = (HttpWebRequest)WebRequest.Create(sbAPIRequest.ToString()); 

       httpWReq.Method = "GET"; 
       httpWReq.ContentType = "application/json;charset=UTF-8"; 
       httpWReq.ContentLength = 0; 

       HttpWebResponse Httpresponse = (HttpWebResponse)httpWReq.GetResponse(); 
       string responseString = new StreamReader(Httpresponse.GetResponseStream()).ReadToEnd(); 
0

@StephenMuecke был правильный ответ для меня. Это было потому, что у моего класса был конструктор без параметров.

мне нужно сделать, это мой кредитки класс

public class Creds 
{ 
    public string Username { get; set; } 
    public string Password { get; set; } 

    public Creds() 
    { 
     this.Username = string.Empty; 
     this.Password = string.Empty; 
    } 

    public Creds(string user, string pass) 
    { 
     this.Username = user; 
     this.Password = pass; 
    } 
} 

Большое спасибо @StephenMuecke

0

Вы не должны создать модель, чтобы принять мульти параметры пост. Вместо этого вы можете использовать динамический объект.

[HttpPost] 
public SomeObject GetSomeObject([FromBody] dynamic postData) { 
    var a = postData.[property name]; 
} 
Смежные вопросы