C#,生成发送到MVC 2操作的HttpPost,并将模型作为参数

C#,生成发送到MVC 2操作的HttpPost,并将模型作为参数,c#,asp.net-mvc-2,post,httpwebrequest,C#,Asp.net Mvc 2,Post,Httpwebrequest,我想构建一个HTTP post,它将发送数据并自动将数据绑定到模型中。我有一个问题,让这个工作,然而,作为模型来了空。我使用的是MVC2 我的控制器 [HttpPost] public JsonResult Authenticate(AuthenticateRequest request) { //...do stuff } 下面是我如何构建请求的 private static string Url(string action, string controller) {

我想构建一个HTTP post,它将发送数据并自动将数据绑定到模型中。我有一个问题,让这个工作,然而,作为模型来了空。我使用的是MVC2

我的控制器

[HttpPost]
public JsonResult Authenticate(AuthenticateRequest request)
{
    //...do stuff
}
下面是我如何构建请求的

private static string Url(string action, string controller)
    {
        return String.Format("{0}/{1}/{2}", Settings.Default.MobileServiceUrl, controller, action);
    }

    public static string Post(string action, string controller, NameValueCollection parameters)
    {
        string url = Url(action, controller);

        using (WebClient client = new WebClient())
        {
            NameValueCollection fields = new NameValueCollection();

            client.UploadValues(url, parameters);

            byte[] respBytes = client.UploadValues(url, fields);

            return client.Encoding.GetString(respBytes);
        }
    }
这是模型课

public class AuthenticateRequest
{
    public string SiteAbbreviation { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string AdminPassword { get; set; }
}
下面是示例数据

NameValueCollection fields = new NameValueCollection();
        fields.Add("SiteAbbreviation", "ABCD");
        fields.Add("Username", "username");
        fields.Add("Password", "password");
        fields.Add("AdminPassword", "password");

        var json = HttpRequestHelper.Post("Authenticate", "Account", fields);

        var result = JsonConvert.DeserializeObject<AuthenticateRequest>(json);
NameValueCollection字段=新的NameValueCollection();
字段。添加(“站点缩写”、“ABCD”);
字段。添加(“用户名”、“用户名”);
字段。添加(“密码”、“密码”);
字段。添加(“AdminPassword”、“password”);
var json=HttpRequestHelper.Post(“身份验证”、“帐户”字段);
var result=JsonConvert.DeserializeObject(json);
编辑:

如果您想知道我为什么要这么做,我的mvc应用程序是一个RESTAPI,它可以返回json。我正在尝试构建一个测试项目来测试我的控制器方法。

假设:

public class AuthenticateRequest
{
    public string SiteAbbreviation { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string AdminPassword { get; set; }
}
以及:

以下几点绝对有效:

using (var client = new WebClient())
{
    var fields = new NameValueCollection
    {
        { "SiteAbbreviation", "ABCD" },
        { "Username", "username" },
        { "Password", "password" },
        { "AdminPassword", "password" }
    };
    byte[] result = client.UploadValues(
        "http://foo.com/someController/authenticate", 
        fields
    );
    // TODO: do something with the result
    // if it is a JSON object deserialize it back to a model
}

一旦你确定这是可行的(而且应该),你就可以开始对代码进行组件化了。

mvc3
中得到了
错误404
。删除
[HttpPost]
属性后,上面的代码工作正常

using (var client = new WebClient())
{
    var fields = new NameValueCollection
    {
        { "SiteAbbreviation", "ABCD" },
        { "Username", "username" },
        { "Password", "password" },
        { "AdminPassword", "password" }
    };
    byte[] result = client.UploadValues(
        "http://foo.com/someController/authenticate", 
        fields
    );
    // TODO: do something with the result
    // if it is a JSON object deserialize it back to a model
}