nancyfx memposting json - Nancy.DynamicDictionary kosong

Saya baru saja mulai bermain dengan NancyFx untuk membandingkannya dengan .net MVC WebAPI dan saya langsung mengalami masalah. Sejauh yang saya pahami, Nancy harus menangani serialisasi langsung dari kotaknya. Tapi sepertinya saya tidak bisa membuatnya berfungsi.

Saya memiliki Modul Nancy yang terlihat seperti ini:

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

Dan saya mempostingnya menggunakan Fiddler seperti ini:

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

Namun ketika objek parameter kosong (dan demikian pula objek myFieldValue). Saya yakin saya melewatkan sesuatu yang sangat jelas, tapi saya tidak tahu apa!


person stevef4000    schedule 24.08.2013    source sumber


Jawaban (2)


Parameter ditujukan untuk pengambilan di url (misalnya /foo/{bar} akan menangkap variabel bar dalam parameter. Jika Anda memposting JSON, Anda harus menggunakan pengikat model (var foo =this.Bind();

Saya akan merekomendasikan untuk melihat dokumennya juga.. Semua ini dibahas di sana :-)

person Steven Robbins    schedule 24.08.2013

Untuk mengeposkan data, Anda harus menggunakan pengikatan model. Sayangnya, pengikatan model ke dinamis tidak didukung dan Anda harus membuat kelas permintaan. Ada solusi yang diusulkan, tetapi saya sendiri tidak menggunakannya.

Jika Anda tidak ingin mendefinisikan kelas untuk permintaan tertentu dan menggunakan pengikatan model, Anda dapat menggunakan kekuatan dynamic dengan json.net. Contoh:

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