问题标签 [frombodyattribute]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
50274 浏览

.net - REST API:获取带有正文的请求

我想实现一个 REST API,并且在我的 GET 请求上需要一个正文。(就像这里讨论的:HTTP GET with request body

是否存在无法通过 GET 请求发送正文的 http 客户端?Fiddler 能够做到这一点,尽管消息框是红色的。

0 投票
3 回答
57924 浏览

c# - 同时读取 FromUri 和 FromBody

我在 web api 中有一个新方法

请求类就像

我正在使用 PostBody 对 localhost/Pusher/PushMessage?x=foo&y=bar 进行查询:

我错过了什么吗?

0 投票
4 回答
16930 浏览

c# - FromBody 值获取 null

这是 Asp.Net Webform 应用程序
这是我在 Apicontroller 中的 POST 方法

我正在使用提琴手后期处理。
我做了这样的实验。
但它没有。

问题是什么。
你能帮我吗?

我试过了,我失败了。

在提琴手中:

0 投票
2 回答
2164 浏览

class - 动态创建 Apex 类

我通过传递此参数和链接创建了 Apex 触发器:

现在我想以同样的方式创建 Apex Trigger... 我需要传递哪些参数以及我应该在 Body 部分写什么。我也提到了这个文档:http: //www.salesforce.com/us/developer/docs/api/index.htm

0 投票
1 回答
3375 浏览

asp.net-mvc - [FromBody] 和 [FromUri] 是否互斥?

我将此 URI 传递给我的 Web API 服务器:

此控制器代码(带有“[FromBody]”注释)不起作用:

...(序列号为空);但这(没有“[FromBody]”注释)确实:

(serialNum 是预期的“8675309e9”)为什么?有人会认为更具体的版本会起作用,但尽管它可以编译,但对于第一个片段,serialNum 为空。

我知道您不能在一种方法中使用两个“[FromBody]”注释,如此所述,但是是否不允许所有其他注释?

0 投票
1 回答
890 浏览

jquery - 使用 Web Api 和 FromBody

我有我的 api,它有一个如下所示的 post 方法:

我通过这样做来调用它:

当我这样做时,我收到400 Bad Request响应。如果我在我的 api 方法中放置一个断点,我会发现Name为空。这是我的收藏模型:

现在,我看过这篇文章:

使用 jquery 将 frombody 参数发布到 web api

它告诉我我需要用一个空键发送我的参数,但我不能用我的Collection做到这一点。

有谁知道如何解决这个问题?或者也许是更好的方法?

任何帮助将不胜感激。

/r3plica

0 投票
1 回答
1436 浏览

encoding - 为什么“越过Rubicon”后HttpWebRequest body val为null?

我正在尝试将 XML 文件的内容从手持设备(Compact Framework/Windows CE)发送到我的服务器应用程序中的 Web API 方法,如下所示(客户端代码):

正如您在注释掉的代码中看到的(“<= 工作正常”),我已经对其进行了测试,并且我想要的数据正在添加到 StringBuilder。没有抛出异常(我没有看到“SendXMLFile 异常”)。

但是,当调用相应的服务器代码时:

...“serialNum”和“siteNum”参数符合预期(包含有效的预期值),但正文(stringifiedXML)为空。为什么?

更新

我也在客户端中添加了这个:

...并且字节数组确实有数据,因为它向我显示“112”(XML 文件非常小)。

更新 2

现在我添加了另一个调试消息:

...而且我什至没有看到“requestStream length is”消息;相反,我看到了“SendXMLFileException NotSupportedException”......???

更新 3

我想这是山楂效应或类似的一个例子。一旦我注释掉了那个调试 (MessageBox.Show()) 语句,我就会回到服务器应用程序中,但是 [FromBody] val 为空。

然后客户端收到消息“无法从传输连接中读取数据

更新 4

stringifiedXML 在这里仍然为空:

...即使在我修改了客户端中的代码之后,对这个问题的回应如下:

注意:我不知道这是否只是关闭服务器的误导性副作用,但我随后在客户端/手持应用程序中看到了这个错误消息:

""System.Net.ProtocolVi..." "提交请求后无法执行此操作。"

更新 5

对于那些想要堆栈跟踪的人,&c:

serNum 和 siteNum 是连接到 uri 中的简单值,如下所示:

我试图像这样获得堆栈跟踪:

...但现在我只看到“提交请求后无法执行此操作。”

更新 6

我将方法签名更改为:

...以及相应的代码:

...但它没有任何区别(而且我没有看到“StackTrave =”消息,所以它一定是失败的 erstwheres)

更新 7

我在里面放了两个调试字符串:

0)

1) 在 SendXMLFile() 中:

...我看到了这个:

在此处输入图像描述

...但是在第二个有机会向我展示血淋淋的细节之前,服务器收到 null 正文值,因此崩溃,然后客户端发出相同的旧“此操作无法在之后执行”请求已提交”投诉。

更新 8

针对建议,“我怀疑如果您在 CreateRequest 调用之后删除 KeepAlive 和 ProtocolVersion 的设置,异常就会消失。 ”,我从这里更改了我的代码:

...对此:

...但我仍然得到相同的错误消息(“提交请求后无法执行此操作”),并且 stringifiedXML 在到达服务器时仍然为空。

更新 9

这是我通过 Fiddler 2 发送我理解的内容时得到的结果(如果您没有视觉超能力,请右键单击图像并在新选项卡中打开):

在此处输入图像描述

...但我不知道我在看什么...它有用吗?它失败了吗?“body == 0”列让我暂停/让我认为它失败了,但“204”似乎意味着“服务器成功处理了请求,但没有返回任何内容”......

更新 10

这是修复 uri 后的 Fiddler 尖叫声,我确实到达了服务器应用程序中的断点,并发送了良好的数据:

在此处输入图像描述

更新 11

通过更改此代码:

...对此:

...我现在在 stringifiedXML 中得到这个:“

...所以我现在得到:“ System.Xml.XmlException 未由用户代码 HResult=-2146232000 处理消息 = 文件意外结束。第 1 行,第 15 位...

反正就是进步了。。。

更新 12

根据 Fiddle 中作为“请求正文”传递的字符串的确切组成/格式,结果完全不同。

以此作为请求正文:

...stringifiedXML 为空

以此作为请求正文:

...stringifiedXML 完全相同 ("")

...但有一个例外:

System.Xml.XmlException 未被用户代码处理 HResult=-2146232000 Message='1.0' 是一个意外的标记。预期的标记是 '"' 或 '''。第 1 行,位置 15。Source=System.Xml LineNumber=1 LinePosition=15 SourceUri="" StackTrace: at System.Xml.XmlTextReaderImpl.Throw(Exception e) at System。 Xml.XmlTextReaderImpl.Throw(String res, String[] args) 在 System.Xml.XmlTextReaderImpl.ThrowUnexpectedToken(String expectedToken1, String expectedToken2) 在 System.Xml.XmlTextReaderImpl.ParseXmlDeclaration(Boolean isTextDecl) 在 System.Xml.XmlTextReaderImpl.Read( )在 System.Xml.Linq.XDocument.Parse(字符串文本,LoadOptions 选项)在 System.Xml.Linq.XDocument 的 System.Xml.Linq.XDocument.Load(XmlReader 阅读器,LoadOptions 选项)。

以此作为请求正文:

...stringifiedXML 是“

倒数第二个,以此作为请求正文:

...stringifiedXML 是完全一样的东西 ("")

...但我得到了这个例外:

System.InvalidOperationException 未被用户代码处理 HResult=-2146233079 Message=Sequence 不包含任何元素 Source=System.Core StackTrace: at System.Linq.Enumerable.First[TSource](IEnumerable`1 source) at HandheldServer.Controllers.DeliveryItemsController.d__2 c:\HandheldServer\HandheldServer\Controllers\DeliveryItemsController.cs 中的 .MoveNext():第 109 行 InnerException:

最后,如果我通过这个,在角度内使用(尽管是虚假的)vals:

...我仍然得到“序列不包含任何元素”

这种方法比Rachel Canning还要挑剔!它想要什么——啤酒里有鸡蛋?!?

更新 13

使用此代码:

...或这个:

. . .XDocument doc = XDocument.Load(await Request.Content.ReadAsStreamAsync());

...这作为传入的 stringifiedXML:

一些任务一些位置

...我收到异常: “System.Xml.XmlException 未被用户代码 HResult=-2146232000 处理=缺少根元素。”

使用此代码(相同的 stringifiedXML):

...我得到,“ System.InvalidOperationException 未由用户代码 HResult=-2146233079 处理消息=序列不包含元素 Source=System.Core StackTrace: at System.Linq.Enumerable.First[TSource](IEnumerable`1 source) at HandheldServer.Controllers.DeliveryItemsController.d__2.MoveNext() 在 c:\HandheldServer\HandheldServer \Controllers\DeliveryItemsController.cs:line 109 InnerException:"

IOW,根据我解析传入字符串的方式,我得到“缺少根元素”或“序列不包含元素”

什么Deuce McAlistair MacLean Virginia Weeper?!?“ <LocateAndLaunch>”不是根元素吗?不是“某些任务”和“某些位置”元素吗?

0 投票
4 回答
30130 浏览

c# - 如何解析这个 XML(没有得到“缺少根元素”或“序列不包含元素”)?

这是这个问题的一个分支Why is the HttpWebRequest body val null after "crossing the Rubicon"?得到了回答(跨越了一个障碍),但下一个障碍让我绊倒了。

使用此代码:

...或这个:

...这作为传入的 stringifiedXML:

...我收到异常:“ System.Xml.XmlException 未被用户代码 HResult=-2146232000 Message=Root 元素处理。

使用此代码(相同的 stringifiedXML):

...我明白了

System.InvalidOperationException 未被用户代码处理 HResult=-2146233079 Message=Sequence 不包含任何元素 Source=System.Core StackTrace: at System.Linq.Enumerable.First[TSource](IEnumerable`1 source) at HandheldServer.Controllers.DeliveryItemsController.d__2 c:\HandheldServer\HandheldServer\Controllers\DeliveryItemsController.cs 中的 .MoveNext():第 109 行 InnerException:

IOW,根据我解析传入字符串的方式,我得到“缺少根元素”或“序列不包含元素

什么Deuce McAlistair MacLean Virginia Weeper?!?不是<LocateAndLaunch>根元素吗?不是Some TaskSome Location元素吗?

我是否需要在无法使用的情况下手动将 XML 拆开XDocument

注意:从 Fiddler 发送正文数据(XML 文本)有效(我发送的内容如我所愿);但即便如此,服务器上的 XML 解析代码也会失败。

但是,尝试从手持/紧凑型框架客户端代码发送相同的数据,只会导致数据通过“=”(类似于<xml version="传递到服务器;然后在客户端上,我看到“无法执行此操作提交请求后

更新

因此,根据 Marcin 的回答,如果我坚持使用 XDocument.Parse() 我应该没问题,并且根据 TToni 的回答,数据/xml 本身可能很糟糕。这是文件的内容:

所以版本号周围有引号 - 但我是否需要以某种方式转义 - 这就是数据被截断的原因 - 因为当它看到第一个引号(“1.0”之前)时,它认为这是字符串终止,也许?

更新 2

Marcin,传入的“xml”数据(字符串)在到达 XDocument 代码之前被截断:

更新 3

通过使用 TToni 的建议并用单引号替换双引号:

...我现在将整个字符串放入我的服务器方法中:

在此处输入图像描述

...但我仍然收到“缺少根元素”:

System.Xml.XmlException 未被用户代码处理 HResult=-2146232000 消息=缺少根元素。Source=System.Xml LineNumber=0 LinePosition=0 SourceUri="" StackTrace: 在 System.Xml.XmlTextReaderImpl.Throw(Exception e) 在 System.Xml.XmlTextReaderImpl.ParseDocumentContent() 在 System.Xml.XmlTextReaderImpl.Read() 在System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options) 在 System.Xml.Linq.XDocument.Load(Stream stream, LoadOptions options) 在 System.Xml.Linq.XDocument.Load(Stream stream) 在 HandheldServer。 c:\HandheldServer\HandheldServer\Controllers\DeliveryItemsController.cs:line 66 InnerException 中的 Controllers.DeliveryItemsController.d__2.MoveNext():

如果我还没有发疯,这会让我发疯。事实上,我不太清楚自己被驱赶到哪里。许多雇主正在寻找有动力的人。也许这就是他们的意思?

更新 4

使用这个:

...而不是这个:

...解决了“缺少根元素”错误消息;因此,我将 Marcin 的答案标记为正确。

0 投票
0 回答
328 浏览

java - 如何在不将其放入 URL 的情况下将一堆 XML 从 Android 传递给 RESTful 方法?

我知道如何在 C# 中做到这一点,事实上我在这里写了一个关于它的提示,但我不知道如何在 Java/Android 中完成它。

到目前为止,我的代码是这样的:

Web API 方法的开头是这样的:

如您所见,我在 URL(serialNum 和 siteNum)中传递了两个(小)val,但是我如何传递 stringifiedXML(它相当大,如果塞进网址)?

C#客户端代码使用了WebClient,但不知道Java中是否有类似的类。

更新

作为对 Affe 的回应(希望他不是德国人)并根据我在这里看到的:

所以你是说我应该这样设置而不是我上面的内容:

...然后像这样使用 UriBuilder:

...使用所有这些来调用服务器:

...调用 AsyncTask 的代码如下:

?

更新 2

显然不是,因为该代码最终到达“ HttpResponse response = httpclient.execute(httppost);” Logcatting这个:

为什么在提供主机名时声称“:java.lang.IllegalArgumentException:主机名可能不为空” - 作为“10.0.2.2:28642” - 对吗?

URLToCall最终成为“ http://10.0.2.2%3A28642%2Fapi/DeliveryItems/PostArgsAndXMLFileAsStr?serialNum=42&siteNum=some%20Site

0 投票
2 回答
2487 浏览

c# - 将 HttpWebRequest 对象传递给 Web API 方法是否过于明确?

我知道(至少我认为是这样),当调用 Web API 方法时,客户端会将 HttpWebRequest 传递给它。IOW,当客户端发送类似这样的内容来调用 Web API 方法时:

...一个包含 serialNum (42) 和 siteNum (99) 值的 HttpWebRequest 对象被传递给该方法。

我还认为(到目前为止,无论如何),如果需要发送大量数据(作为 URI 的一部分传递的太多/太多,例如示例中的 serialNum 和 siteNum),则可以将这些数据嵌入客户端上的 HttpWebRequest 对象如下:

...然后使用“[FromBody]”属性在另一端(服务器)解码,如下所示:

我的假设正确吗?IOW,对于这样的测试代码:

...如果我当前的 Web API 方法:

...改为:

?

为了更简单,我认为使用 HttpWebRequest 对象作为我的 Web API 方法的参数太明确了;我认为/希望发送的 HttpWebRequest 是“给定的”,在这种情况下我需要的是“[FromBody] stringifiedXML”参数,然后我可以“解包”[FromBody] 数据,就像我给出的示例一样上面(例如,“XDocument doc = XDocument.Parse(stringifiedXML);”)。

我是否在我现有的代码中正确(它明确地将 HttpWebRequest 对象作为方法的参数传递)或在其他情况下(我假设 HttpWebRequest 对象隐式已知存在,而是处理嵌入的 [FromBody] 数据它),或者我在这两种情况下都不对?

如果我在第一个/当前情况下是正确的(我必须传递一个 HttpWebRequest 对象),我怎样才能获得 HttpWebRequest 对象中的嵌入数据?我需要调用“getResponseStream”还是...???

更新

如果我能够放弃对 HttpWebRequest 的显式使用,那么还有另一个问题。这个:

...不编译为接口方法,因为“[FromBody]”属性无法识别。用“字符串”替换它就足够了吗?

更新 2

我已将“HttpWebRequest httpwebreq”替换为“[FromBody] String stringifiedXML”,例如:

...但现在我得到了,“找不到类型或命名空间名称'FromBody'(您是否缺少 using 指令或程序集引用?)”

我是否添加了“使用 System.Web.Http;” 或不。

如果我需要将 DLL 添加到项目引用中,它是哪个 DLL?