nancyfx โพสต์ json - Nancy.DynamicDictionary ว่างเปล่า

ฉันเพิ่งเริ่มเล่นกับ NancyFx เพื่อเปรียบเทียบกับ .net MVC WebAPI และฉันก็พบปัญหาทันที ตามที่ฉันเข้าใจ Nancy ควรจัดการการทำให้เป็นอนุกรมทันที แต่ดูเหมือนว่าฉันจะไม่สามารถทำงานได้

ฉันมีโมดูล Nancy ที่มีลักษณะดังนี้:

public class HelloWorld : NancyModule
{
    public HelloWorld()
    {
        Post["/"] = parameters =>
            {
                var myFieldValue = parameters.myField;
                return HttpStatusCode.OK;
            };
    }
}

และฉันโพสต์โดยใช้ Fiddler ดังนี้:

Headers:
    User-Agent: Fiddler
    Content-Type: application/json
    Host: localhost:3141
    Content-Length: 24
Request-Body: 
    {"myField" : "profit"}

อย่างไรก็ตาม เมื่อวัตถุพารามิเตอร์ว่างเปล่า (ดังนั้นจึงเป็นวัตถุ myFieldValue) ฉันแน่ใจว่าฉันพลาดบางสิ่งบางอย่างที่ชัดเจนจริงๆ แต่ฉันไม่รู้ว่าอะไร!


person stevef4000    schedule 24.08.2013    source แหล่งที่มา


คำตอบ (2)


พารามิเตอร์มีไว้สำหรับการจับใน url (เช่น /foo/{bar} จะจับตัวแปรแท่งในพารามิเตอร์ หากคุณกำลังโพสต์ JSON คุณควรใช้ตัวประสานโมเดล (var foo =this.Bind();

ฉันอยากจะแนะนำให้ดูเอกสารด้วย .. ทั้งหมดนี้ครอบคลุมอยู่ในนั้น :-)

person Steven Robbins    schedule 24.08.2013

สำหรับการโพสต์ข้อมูล คุณต้องใช้ การผูกโมเดล ขออภัย ไม่รองรับการเชื่อมโยงโมเดลกับไดนามิก และคุณต้องสร้างคลาสคำขอ มี วิธีแก้ปัญหา ที่เสนอ แต่ฉันไม่ได้ใช้เอง

หากคุณไม่ต้องการกำหนดคลาสสำหรับคำขอเฉพาะและใช้การเชื่อมโยงโมเดล คุณสามารถใช้พลังของ dynamic กับ json.net ตัวอย่าง:

public AuthTokenModule (IAuthService authService, UserMapper mapper) : base ("api/v1/authToken")
    {
        Post ["/login"] = x => {
            dynamic request = JsonConvert.DeserializeObject (Request.Body.AsString ());

            var user = mapper.ValidateUser ((string)request.email, (string)request.password);
person Igor Yalovoy    schedule 01.06.2015