C#,生成发送到MVC 2操作的HttpPost,并将模型作为参数
我想构建一个HTTP post,它将发送数据并自动将数据绑定到模型中。我有一个问题,让这个工作,然而,作为模型来了空。我使用的是MVC2 我的控制器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) {
[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
}