如何获取我的帖子数据?(原文为Nancy (C#): How do I get my post data?)
我正在使用Corona SDK将数据发布到C#服务器:
headers [“Content-Type”] = “application/x-www-form-urlencoded”
headers [“Accept-Language”] = “en-US”
local body = “color = red&size = small”
local params = {}
params.headers = headers
params.body = body
network.request(host ..“/ UpdateHand”,“POST”,nwListener,params)
我在服务器上收到一条消息:
Post [“/ UpdateHand”] = x =>
{
Console.WriteLine(“Received ...”);
返回“确定”;
};
但是当我检查数据时(当我在上面放置断点时),我没有看到我的数据位于哪里(即params.body或params.headers)。 我怎样才能提取这些信息?
根据Corona上的文档,我应该正确发布它:[http://docs.coronalabs.com/daily/api/library/network/request.html](http://docs.coronalabs.com/daily/api/library/network/request.html)
这个实际上非常好用:
var body = this.Request.Body;
int length = (int) body.Length; // 这是一个动态变量
byte[] data = new byte[length];
body.Read(data, 0, length);
Console.WriteLine(System.Text.Encoding.Default.GetString(data));
理想情况下,使用简单的 Bind() 调用就可以获取您的帖子数据。然而,在 post 调用中使用 Bind 时,我发现结果不一致,所以我采用了上面提出的方案。
我看到过关于 Nancy Bind() 工作和不工作的各种讨论……我在 Post 中看到了这两种情况,但无法解释不一致性。我看到它正常工作的地方是,我可以保证请求的正文被处理如下:
var data = Encoding.ASCII.GetBytes (postData);
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream ()) {
stream.Write (data, 0, data.Length);
}
然而,当发送应该被类似处理的数据(尽管我无法确认)通过 WSO2 基础设施(数据序列化为发送到服务代理的 JSON 事件字典),Bind 失败,而上述方法成功。
这个可以使用 Nancy 扩展来实现。你需要包含相关的命名空间。
using Nancy.Extensions;
var text = Context.Request.Body.AsString();
我喜欢这个方法的简洁性,它是 Nancy 超级简单路径的一部分。
但是请注意!该方法将流保留在末尾,所以后续调用会返回空字符串。为了解决这个问题,总是立即重置流,如下所示:
Request.Body.Seek(0, SeekOrigin.Begin);
Nancy 2.0 应该会纠正这个问题,使得流位置默认重置。
对于 Nancy 2.0.0, Request.Body现在是 Stream,而不是 RequestStream,所以没有 AsString 方法。然而,以下方法似乎可以:
using (var reqStream = RequestStream.FromStream(Request.Body))
{
var body = reqStream.AsString();
// ... do stuff with body
}
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
该消息数据在
this.Request.Body如果你有适当的类型,你可以使用模型绑定将数据反序列化为该类型:
var x = this.Bind<YourType>();