这似乎并没有我想象的那么容易。我在网上找到了一些解决方案,但它们对我不起作用。我有一个 ASP.Net MVC 3 项目,安装了 Microsoft ASP.Net Web API 2.1 nuget 包。现在,我希望能够读取发布到 Web API Controller 的数据。发送的数据会有所不同,因此我无法使用强类型 ViewModel。
以下是我尝试过的解决方案:
public void Post([FromBody]string value)
{
...
}
public void Post([FromBody]List<string> values)
{
...
}
public void Post([FromBody]NameValueCollection values)
{
...
}
但是我的值或值变量始终为空。我知道 Controller 正在接收数据,因为我可以通过访问 (System.Web.HttpContextWrapper)Request.Properties["MS_HttpContext"].Request.Form 来检查它。但它看起来不像检索数据的正确方法。应该有一种更干净的方法。
更新:
以下是我发布信息的方式:
我正在同一 Web 应用程序中发布来自另一个 Controller 的数据:
public ActionResult SendEmailUsingService()
{
dynamic email = new ExpandoObject();
email.ViewName = "EmailTest";
email.From = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="89effbe6e4e8ededfbecfafac9f0e8e1e6e6a7eae6e4" rel="noreferrer noopener nofollow">[email protected]</a>";
email.To = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="41352e2025253324323201262c20282d6f222e2c" rel="noreferrer noopener nofollow">[email protected]</a>";
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 Controller 中得到以下结果:
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}
最佳答案
我终于在这里找到了问题的答案:
解决方案是使用 FormDataCollection:
public void Post([FromBody]FormDataCollection formData)
{
...
}
关于asp.net-mvc-3 - 如何读取 ASP.Net MVC 3 Web API 2.1 Controller 中的 POST 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22241544/