问题标签 [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.
.net - REST API:获取带有正文的请求
我想实现一个 REST API,并且在我的 GET 请求上需要一个正文。(就像这里讨论的:HTTP GET with request body)
是否存在无法通过 GET 请求发送正文的 http 客户端?Fiddler 能够做到这一点,尽管消息框是红色的。
c# - 同时读取 FromUri 和 FromBody
我在 web api 中有一个新方法
请求类就像
我正在使用 PostBody 对 localhost/Pusher/PushMessage?x=foo&y=bar 进行查询:
我错过了什么吗?
c# - FromBody 值获取 null
这是 Asp.Net Webform 应用程序
这是我在 Apicontroller 中的 POST 方法
我正在使用提琴手后期处理。
我做了这样的实验。
但它没有。
问题是什么。
你能帮我吗?
我试过了,我失败了。
在提琴手中:
class - 动态创建 Apex 类
我通过传递此参数和链接创建了 Apex 触发器:
现在我想以同样的方式创建 Apex Trigger... 我需要传递哪些参数以及我应该在 Body 部分写什么。我也提到了这个文档:http: //www.salesforce.com/us/developer/docs/api/index.htm
asp.net-mvc - [FromBody] 和 [FromUri] 是否互斥?
我将此 URI 传递给我的 Web API 服务器:
此控制器代码(带有“[FromBody]”注释)不起作用:
...(序列号为空);但这(没有“[FromBody]”注释)确实:
(serialNum 是预期的“8675309e9”)为什么?有人会认为更具体的版本会起作用,但尽管它可以编译,但对于第一个片段,serialNum 为空。
我知道您不能在一种方法中使用两个“[FromBody]”注释,如此处所述,但是是否不允许所有其他注释?
jquery - 使用 Web Api 和 FromBody
我有我的 api,它有一个如下所示的 post 方法:
我通过这样做来调用它:
当我这样做时,我收到400 Bad Request响应。如果我在我的 api 方法中放置一个断点,我会发现Name为空。这是我的收藏模型:
现在,我看过这篇文章:
使用 jquery 将 frombody 参数发布到 web api
它告诉我我需要用一个空键发送我的参数,但我不能用我的Collection做到这一点。
有谁知道如何解决这个问题?或者也许是更好的方法?
任何帮助将不胜感激。
/r3plica
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
>”不是根元素吗?不是“某些任务”和“某些位置”元素吗?
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 Task
和Some 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 的答案标记为正确。
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
”
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?