【发布时间】:2014-03-07 04:36:48
【问题描述】:
这似乎不像我想象的那么容易。我在网上找到了一些解决方案,但它们对我不起作用。我有一个安装了 Microsoft ASP.Net Web API 2.1 nuget 包的 ASP.Net MVC 3 项目。现在,我希望能够读取发布到 Web api 控制器的数据。发送的数据会有所不同,所以我不能使用强类型的 ViewModel。
以下是我尝试过的解决方案:
public void Post([FromBody]string value)
{
...
}
public void Post([FromBody]List<string> values)
{
...
}
public void Post([FromBody]NameValueCollection values)
{
...
}
但我的值或值变量始终为空。但是我知道控制器正在接收数据,因为我可以通过访问 (System.Web.HttpContextWrapper)Request.Properties["MS_HttpContext"].Request.Form 来检查它。不过,它看起来不像是检索数据的正确方法。应该有更清洁的方式。
更新:
这是我发布信息的方式:
我在同一个 Web 应用程序中发布来自另一个控制器的数据:
public ActionResult SendEmailUsingService()
{
dynamic email = new ExpandoObject();
email.ViewName = "EmailTest";
email.From = "fromaddress@yahoo.com";
email.To = "toaddress@gmail.com";
email.Fullname = "John Smith";
email.Url = "www.mysite.com";
IDictionary<string, object> data = email;
using (var wb = new WebClient())
{
string url = BaseUrlNoTrailingSlash + Url.RouteUrl("DefaultApi", new { httproute = "", controller = "Emailer" });
var response = wb.UploadValues(url, "POST", data.ToNameValueCollection());
}
return View();
}
如果我像这样声明一个 httpContext 变量,这就是我在 Post web api 控制器中得到的结果:
var httpContext = (System.Web.HttpContextWrapper)Request.Properties["MS_HttpContext"];
httpContext.Request.Form = {ViewName=EmailTest&From=fromaddress%40yahoo.com&To=toaddress%40gmail.com&Fullname=John+Smith&Url=www.mysite.com}
httpContext.Request.Form 是一个 System.Collections.Specialized.NameValueCollection {System.Web.HttpValueCollection}
【问题讨论】:
-
您能否添加一些示例来说明如何将数据发布到 API?
-
@JonSusiak 请参阅我原帖中的更新部分。我刚刚添加了您要问我的信息。
标签: asp.net-mvc-3 c#-4.0 http-post asp.net-web-api2