当前位置: 首页 > 知识库问答 >
问题:

如何在WebAPI中获取POST数据?

祖新觉
2023-03-14

我以以下形式向服务器发送请求:

http://localhost:12345/api/controller/par1/par2

请求已正确解析为以下方法:

[HttpPost]
public void object Post(string par1, string par2)

但是,我通过请求内容传递附加数据。如何检索这些数据?

为了举例,让我们假设,请求是从表单发送的:

<form action="http://localhost:12345/api/controller/par1/par2" method="post">
    <input type="hidden" name="data" value="value" />
    <input type="submit" name="submit" value="Submit" />
</form>

共有3个答案

汤枫
2023-03-14

我在发送带有多个参数的请求时遇到问题。

我通过发送一个类解决了这个问题,将旧参数作为属性。

<form action="http://localhost:12345/api/controller/method" method="post">
    <input type="hidden" name="name1" value="value1" />
    <input type="hidden" name="name2" value="value2" />
    <input type="submit" name="submit" value="Submit" />
</form>

模型类:

public class Model {
    public string Name1 { get; set; }
    public string Name2 { get; set; }
}

控制器:

public void method(Model m) {
    string name = m.Name1;
}
韦晟睿
2023-03-14

今天我花了很多时间来思考处理web表单数据的旧方法和如何使用WebAPI之间的范式转换(意义重大但功能强大),我想我应该在这次讨论中多加一分钱。

我想做的是(这对于文章的web表单处理来说非常常见)能够以任何顺序获取我想要的任何表单值。说“如果你的数据在系统中,你可以做什么”。收藏。专业的NameValueCollection。但事实证明,在WebAPI中,来自帖子的数据以流的形式返回给您。所以你不能直接这么做。

但是有一个名为FormDataCollection(在System.Net.Http.Formatting中)的很酷的小类,它允许您在集合中迭代一次。

因此,我编写了一个简单的实用程序方法,它将运行一次FormDataCollection,并将所有值粘贴到NameValueCollection中。一旦这样做了,你就可以把所有的数据转移到你心中的内容。

因此,在我的ApiController派生类中,我有一个如下的post方法:

    public void Post(FormDataCollection formData)
    {
        NameValueCollection valueMap = WebAPIUtils.Convert(formData);

        ... my code that uses the data in the NameValueCollection
    }

静态WebAPIUtils类中的Convert方法如下所示:

    /// <summary>
    /// Copy the values contained in the given FormDataCollection into 
    /// a NameValueCollection instance.
    /// </summary>
    /// <param name="formDataCollection">The FormDataCollection instance. (required, but can be empty)</param>
    /// <returns>The NameValueCollection. Never returned null, but may be empty.</returns>
    public static NameValueCollection Convert(FormDataCollection formDataCollection)
    {
        Validate.IsNotNull("formDataCollection", formDataCollection);

        IEnumerator<KeyValuePair<string, string>> pairs = formDataCollection.GetEnumerator();

        NameValueCollection collection = new NameValueCollection();

        while (pairs.MoveNext())
        {
            KeyValuePair<string, string> pair = pairs.Current;

            collection.Add(pair.Key, pair.Value);
        }

        return collection;
     }

希望这有帮助!

松和安
2023-03-14

这个问题的答案是:如何使用asp获取Json Post值。NETWebAPI

>

  • 使用参数绑定的自动执行;请注意,动态代码是由JToken组成的,因此是代码。值访问器。

    public void Post([FromBody]dynamic value) {
        var x = value.var1.Value; // JToken
    }
    

    读起来就像请求一样。请求URI。ParseQueryString()[键]

    public async Task Post() {        
       dynamic obj = await Request.Content.ReadAsAsync<JObject>();
       var y = obj.var1;
    }
    

    和#2一样,只是不是异步的(?)所以你可以在一个辅助方法中使用它

    private T GetPostParam<T>(string key) {
        var p = Request.Content.ReadAsAsync<JObject>();
        return (T)Convert.ChangeType(p.Result[key], typeof(T)); // example conversion, could be null...
    }
    

    注意--需要媒体类型应用程序/json以触发JsonMediaTypeFor事处理。

  •  类似资料:
    • 问题内容: 我正在尝试使用Flask构建一个简单的API,现在我想在其中读取一些POSTed JSON。我使用Postman Chrome扩展程序进行POST,而我发布的JSON就是。我尝试使用以下方法读取JSON: 在浏览器上,它可以正确返回我放入GET中的UUID,但是在控制台上,它只是打印出来(我希望它可以在其中打印出来。有人知道我如何从Flask方法中获取发布的JSON吗? 问题答案: 首

    • 我尝试做的是从同一个站点发布数据并从它创建一个新的订单(当提交按钮被点击时)。我没有任何信息在我的请求。身体,我怀疑是在我的ejs出了问题,任何反馈是非常感谢的。 我的ejs文件: 和我的js文件:

    • 问题内容: 我正在尝试使用Flask构建一个简单的API,现在我想在其中读取一些。我使用扩展程序进行,而我发布的就是。我尝试使用以下方法读取JSON: 在浏览器上,它可以正确返回我放入GET中的UUID,但是在控制台上,它只是打印出来(我希望它可以在其中打印出来。有人知道我如何从方法中获取发布的吗? 问题答案: 首先,该.json属性是一个委托给的属性,该属性记录了您None在此处看到的原因。 您

    • 问题内容: 我将以下内容作为POST提交到php页面: 这是请求(POST请求)的主体。 在php中,我该怎么做才能提取该值? 不是解决方案,不能正常工作。 问题答案: 要访问POST或PUT请求(或任何其他HTTP方法)的实体主体,请执行以下操作: 另外,该常量是的已经开放的流,因此您可以选择执行以下操作: php:// input 是一个只读流,允许您从请求正文中读取原始数据。对于POST请求

    • 当我尝试发送请求时“http://localhost:1234/api/case/create?signature=123456“从Postman(谷歌扩展)使用body请求中的“表单数据”,我得到错误: “消息”:“此资源不支持请求实体的媒体类型‘多部分/表单数据’。”,“ExceptionMessage”:“没有MediaTypeFormatter可用于从媒体类型为“multipart/for