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

Jef*_*ito 21 c# lua coronasdk nancy

我正在使用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 )
Run Code Online (Sandbox Code Playgroud)

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

  Post["/UpdateHand"] = x =>
        {
            Console.WriteLine("Received ...");
            return "Ok";
        };
Run Code Online (Sandbox Code Playgroud)

但是当我检查数据时(当我在其上放置一个断点)时,我看不到我的数据所在的位置(即params.body或params.headers).我该如何提取这些信息?

我应该根据Corona上的文档正确发布它:http://docs.coronalabs.com/daily/api/library/network/request.html

Chr*_*dal 34

帖子数据在

this.Request.Body
Run Code Online (Sandbox Code Playgroud)

如果您有合适的类型,可以使用模型绑定将数据反序列化为它:

var x = this.Bind<YourType>();
Run Code Online (Sandbox Code Playgroud)

  • 如果内存服务有一个RequestStream的AsString扩展方法,那么你可以通过执行this.Request.Body.AsString()将主体作为字符串. (15认同)
  • @ChristianHorsdal,它位于Nancy.Extensions命名空间中 (6认同)

Dan*_*ams 13

南希有一个延伸.您需要为其包含命名空间.

using Nancy.Extensions;
var text =  Context.Request.Body.AsString();
Run Code Online (Sandbox Code Playgroud)

我喜欢这是多么简洁,是南希的超级简单路径的一部分.

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

Request.Body.Seek(0, SeekOrigin.Begin);
Run Code Online (Sandbox Code Playgroud)

Nancy 2.0应该对此进行更正,以便默认情况下重置流位置.

https://github.com/NancyFx/Nancy/pull/2158


小智 7

这实际上很有效:

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));
Run Code Online (Sandbox Code Playgroud)