C# MVC4 Web API Post参数Null

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 = $.

为这些人工作的东西,似乎对我不起作用。我有几乎完全相同的设置,但在我的第二个控制器中仍然为空。第一个工作正常,但我无法在第二个控制器中复制它

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);
});
控制器类

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,真是糟糕!对不起,我不相信你。我扔了一个进去只是为了看看,它成功了!非常感谢。对不起,不行,继续。这是斯蒂芬·穆克的建议。谢谢你的回复!