我以以下形式向服务器发送请求:
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>
我在发送带有多个参数的请求时遇到问题。
我通过发送一个类解决了这个问题,将旧参数作为属性。
<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;
}
今天我花了很多时间来思考处理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;
}
希望这有帮助!
这个问题的答案是:如何使用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文件:
当我尝试发送请求时“http://localhost:1234/api/case/create?signature=123456“从Postman(谷歌扩展)使用body请求中的“表单数据”,我得到错误: “消息”:“此资源不支持请求实体的媒体类型‘多部分/表单数据’。”,“ExceptionMessage”:“没有MediaTypeFormatter可用于从媒体类型为“multipart/for
问题内容: 我正在尝试使用Flask构建一个简单的API,现在我想在其中读取一些。我使用扩展程序进行,而我发布的就是。我尝试使用以下方法读取JSON: 在浏览器上,它可以正确返回我放入GET中的UUID,但是在控制台上,它只是打印出来(我希望它可以在其中打印出来。有人知道我如何从方法中获取发布的吗? 问题答案: 首先,该.json属性是一个委托给的属性,该属性记录了您None在此处看到的原因。 您
问题内容: 我将以下内容作为POST提交到php页面: 这是请求(POST请求)的主体。 在php中,我该怎么做才能提取该值? 不是解决方案,不能正常工作。 问题答案: 要访问POST或PUT请求(或任何其他HTTP方法)的实体主体,请执行以下操作: 另外,该常量是的已经开放的流,因此您可以选择执行以下操作: php:// input 是一个只读流,允许您从请求正文中读取原始数据。对于POST请求