Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
南希(C#):我如何获取我的帖子数据?_C#_Lua_Coronasdk_Nancy - Fatal编程技术网

南希(C#):我如何获取我的帖子数据?

南希(C#):我如何获取我的帖子数据?,c#,lua,coronasdk,nancy,C#,Lua,Coronasdk,Nancy,我正在使用Corona SDK将数据发布到我的C#服务器: 我在服务器上收到一条消息: Post["/UpdateHand"] = x => { Console.WriteLine("Received ..."); return "Ok"; }; 但是,当我检查数据时(当我在数据上放置断点时),我看不到数据的位置(即params.body或params.headers)。如何提取这些信息 我应该根据Cor

我正在使用Corona SDK将数据发布到我的C#服务器:

我在服务器上收到一条消息:

  Post["/UpdateHand"] = x =>
        {
            Console.WriteLine("Received ...");
            return "Ok";
        };
但是,当我检查数据时(当我在数据上放置断点时),我看不到数据的位置(即params.body或params.headers)。如何提取这些信息

我应该根据Corona上的文档正确地发布它:

发布数据在

this.Request.Body
如果您有合适的类型,可以使用模型绑定将数据反序列化到该类型:

var x = this.Bind<YourType>();
var x=this.Bind();

这实际上非常有效:

var body = this.Request.Body; 
int length = (int) body.Length; // this is a dynamic variable
byte[] data = new byte[length]; 
body.Read(data, 0, length);             
Console.WriteLine(System.Text.Encoding.Default.GetString(data));

理想情况下,获取post数据可以通过简单的Bind()调用完成。然而,在post调用中使用绑定时,我看到了不一致的结果,因此我求助于使用上述方案

我看过关于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事件字典)发送本应进行类似处理(尽管我无法确认)的数据时,绑定失败,而上述方法成功。

对此有一个扩展。您将需要包含它的名称空间

using Nancy.Extensions;
var text =  Context.Request.Body.AsString();
我喜欢这是多么简洁,这是南希的超级傻瓜轻松路线的一部分

但要小心一点!此方法将流保留在末尾,因此后续调用将返回空字符串。要解决此问题,请始终在之后立即重置流,如下所示:

Request.Body.Seek(0, SeekOrigin.Begin);
Nancy 2.0应该纠正这一点,以便在默认情况下重置流位置


对于Nancy 2.0.0,
请求.正文
是一个
而不是
请求流
,因此没有
关联
方法。然而,这似乎是可行的:

using (var reqStream = RequestStream.FromStream(Request.Body))
{
    var body = reqStream.AsString();
    // ... do stuff with body
}

谢谢,我现在没有合适的型号,所以我做了第一个。当我执行var b=this.Request.Body时,我的输出是“Nancy.IO.RequestStream”。它不应该在发送时接收正文吗?好的,这似乎给出了一些期望的输出:var id=this.Request.body;字节[]数据=新字节[10];id.Read(数据,0,5);WriteLine(System.Text.Encoding.Default.GetString(数据));如果内存可用,那么RequestStream有一个AsString扩展方法,因此您可以通过执行以下操作将正文作为字符串获取。Request.body.AsString()@ChristianHorsdal,位于Nancy.Extensions命名空间中。如果您不想使用模型绑定,请查看以下答案:Corona(正在流行。使用Nancy 2.0.0-但是
Context.Request.Body
是一个
系统.IO.Stream
-因此没有可用的
AsString
:(Ian-它应该在Nancy.Extensions中。
using (var reqStream = RequestStream.FromStream(Request.Body))
{
    var body = reqStream.AsString();
    // ... do stuff with body
}