asp.net-mvc-3 - 如何读取 ASP.Net MVC 3 Web API 2.1 Controller 中的 POST 数据?

标签 asp.net-mvc-3 c#-4.0 http-post asp.net-web-api2

这似乎并没有我想象的那么容易。我在网上找到了一些解决方案,但它们对我不起作用。我有一个 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}

最佳答案

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

Web API Form Data Collection

解决方案是使用 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/

相关文章:

android - 没有得到响应response = httpclient.execute(request);

asp.net-mvc - 使用无障碍 JQuery 在部分 View 中显示错误消息时遇到问题

asp.net-mvc - 有没有办法从 Controller A 调用的 Controller B 返回 ActionResult,同时向 B 提供特定模型?

.net - 在.rdlc报告的底部设置一个文本框

c# - 使用 StringBuilder 编写语句的更简单方法

javascript - 获取发送到 Python/Django 的 POST 请求的 None 值(通过 Axios 库)

ASP.net 缓存绝对过期不起作用

asp.net-mvc - 删除@Html.TextArea的文本onclick/onfocus事件

javascript - 如何使用javascript动态加载telerik datepicker

python - 在 HTTP POST header 中包含 session