C# MVC4 Web API Post参数Null
为这些人工作的东西,似乎对我不起作用。我有几乎完全相同的设置,但在我的第二个控制器中仍然为空。第一个工作正常,但我无法在第二个控制器中复制它 API调用C# MVC4 Web API Post参数Null,c#,asp.net,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,为这些人工作的东西,似乎对我不起作用。我有几乎完全相同的设置,但在我的第二个控制器中仍然为空。第一个工作正常,但我无法在第二个控制器中复制它 API调用 $.ajax ({ type: "POST", url: "http://localhost:52441/api/login", data: { "Username": "test", "Password": "ptest" } }) .done(function (data) { //var json = $.
$.ajax
({
type: "POST",
url: "http://localhost:52441/api/login",
data: { "Username": "test", "Password": "ptest" }
})
.done(function (data) {
//var json = $.parseJSON(data);
console.log(data);
});
控制器类
public class LoginController : ApiController
{
public bool Post([FromBody]Creds creds)
{
return false;
}
}
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;
}
}
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;
}
}
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;
}
}
就像我说的,这在另一个控制器UsersController中工作。当我传递{First_Name:John,Last_Name:Doe}时,我在Post方法public void Post[FromBody]User User User中正确地接收到一个User对象
我在这里遗漏了什么?尝试使用下面修改过的代码: 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;
}
}
信用等级:
未更改。遵循以下代码
Web API
控制器类
public class LoginController : ApiController
{
public bool Post([FromBody]Creds creds)
{
return false;
}
}
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;
}
}
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;
}
}
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;
}
}
以以下方式使用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);
}
});
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();
创建一个客户端应用程序,该应用程序将以以下方式调用webapi
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);
}
});
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();
@斯蒂芬穆克给了我正确的答案。这是因为我的类有一个无参数构造函数 我需要在我的信用课上这样做
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;
}
}
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;
}
}
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您不必创建模型来获取多个post参数。可以改用动态对象
[HttpPost]
public SomeObject GetSomeObject([FromBody] dynamic postData) {
var a = postData.[property name];
}
不确定它是否适用于web api,但对于mvc它肯定会失败,因为您没有用于web api的无参数构造函数Creds@StephenMuecke谢谢你的回复!我将设置一个,但在我最初的帖子中,我提到我也有一个用户类,它的设置完全相同,并且可以工作。另外,我不确定这是否能解释为什么我的post参数为null?@StephenMuecke,真是糟糕!对不起,我不相信你。我扔了一个进去只是为了看看,它成功了!非常感谢。对不起,不行,继续。这是斯蒂芬·穆克的建议。谢谢你的回复!