【问题标题】:How do you read POST data in an ASP.Net MVC 3 Web API 2.1 controller?如何在 ASP.Net MVC 3 Web API 2.1 控制器中读取 POST 数据?
【发布时间】: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


【解决方案1】:

我终于在这里找到了我的问题的答案:

Web API Form Data Collection

解决办法是使用FormDataCollection:

    public void Post([FromBody]FormDataCollection formData)
    {
        ...
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2021-08-13
    • 2018-06-18
    • 2019-08-31
    • 1970-01-01
    相关资源
    最近更新 更多