gpt4 book ai didi

asp.net - 如何在Web API Controller Post方法中接收动态数据

转载 作者:行者123 更新时间:2023-12-02 15:36:08 25 4
gpt4 key购买 nike

jqgrid 将 json 数据发布到 POST 请求缓冲区中

{"headerData": {
"Tasudok": "134",
"Kuupaev": "2015-11-23",
"Dokumnr": "135319"
},


"rowData": {
"Toode":"",
"Kogus":"0.0000",
"Nimetus":"öäölä<a",
"_rowsum":"0.00",
"Id":"1639",
"Dokumnr":"135319",
"_oper":"edit",
"_rowid":"1639"
}
}

使用 API/Entity/someid?culture=en&layout=1 等 URL 和默认路由将数据发布到 ASP.NET MVC4 Web API。

headerDatarowData 值属性在运行时定义,并且可能会有所不同。

例如,在某些调用中 rowData 可能包含其他属性,并且某些 rowData 属性可能会丢失。

culturelayout 查询字符串参数是可选的。

如何在WebAPI Controller 中接收参数?

我试过了

public class EntityController : APIController
{

public class PostParams {
public string culture { get; set; }
public int? layout { get; set; }
}

public HttpResponseMessage Post(string id,
[FromUri]PostParams optionalParams,
[FromBody]IList<NameValue> headerData,
[FromBody]IList<NameValue> rowData )
{ ... }


public class NameValue
{
public string name, value;
}
}

但是 headerData 和 rowData 为空。如何获取所有参数?

最佳答案

如果JSON的结构没有改变

有了这个,您就可以发送像您在 url 中提供的正文一样的正文API/Entity/someid?culture=en&layout=1。

要在 Controller 路由中指定可选查询参数,请为其指定默认值,例如:

public class EntityController : APIController
{
public HttpResponseMessage Post([FromUri]string culture="EN", [FromUri]int layout=1, YourBody body )
{ ... }
}

如果 YourBody 始终像您提到的那样,则应自动反序列化类似的内容:

public class YourBody
{
public Dictionary<string, string> HeaderData {get; set;}
public Dictionary<string, string> RowData{get; set;}
}

并且可以让您完全访问正文的任何​​元素。

如果 JSON 的结构可以改变

这样的东西将允许接收任何类型的 json:

public HttpResponseMessage  Post([FromBody]JToken body)
{
// Process the body
return ...
}

您将需要一些额外的验证,因为不会进行对象反序列化。您唯一知道的是您的正文是 JSON。

因此,您可能需要解析它以查看它是否像您所期望的那样。请参阅that post about how to access element of a JSON with JToken .

例如,您可以执行以下操作来处理不断变化的正文内容,并仍然处理路由的可选查询参数:

public HttpResponseMessagePost([FromBody]JToken body, [FromUri]string culture="EN", [FromUri]int layout=1)
{
JObject headerData= body["headerData"].Value<JObject>();
JObject headerData= body["rowData"].Value<JObject>();
return ...;
}

您还可以阅读this有关将原始数据发布到 webapi Controller 的其他替代方案。

关于asp.net - 如何在Web API Controller Post方法中接收动态数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33924458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com