ASP.NET-WebAPI-JSON-Binding-Fallsensitivität

Upgrade von ASP.NET WebAPI Beta auf RC hat einige Menge Aufregung und sehr viel Frust. Ich habe in der Lage zu arbeiten, durch die Mehrheit der Probleme, aber die, die mich beißen jetzt ist der groß-und Kleinschreibung von JSON-Daten anfordern.

Den formatter verwendet, für JSON-requests (das ist standardmäßig ein JSON.NET formatter) zu sein scheint-und Kleinschreibung während der formatter verwendet für form-urlencoded Daten nicht. Gibt es eine Möglichkeit, konfigurieren Sie die JSON-Anfragen verwenden Sie eine case-insensitive-Formatierer?

Hier ist ein einfaches Beispiel um zu veranschaulichen das problem, dass ich mit JSON requests:

HTML /JavaScript

<button id="tester">Click here!</button>

<script type="text/javascript">
    $(function () {
        $("#tester").on("click", function() {
            $.ajax({
                type: "POST",
                url: "/Api/Test/Index/" + 168,
                data: ko.toJSON({ key: 123, value: "test value" }), //THIS FAILS
                               //Key: 123, Value: "test value" <- BUT THIS WORKS
                contentType: "application/json; charset=utf-8",
                statusCode: {
                    200: function () {
                        $("body").append("<p>Success</p>");
                    },
                    400: function () {
                        $("body").append("<p>Failure</p>");
                    }
                }
            }).always(function () {
                $("body").append("<hr />");
            });
        });
    });
</script>

C#

public class TestController : ApiController
{
    public HttpResponseMessage Index(int? id, KeyValuePair<int, string> test)
    {
        if (id != 168 || test.Key != 123 || test.Value != "test value")
            return Request.CreateResponse(HttpStatusCode.BadRequest);

        return Request.CreateResponse(HttpStatusCode.OK);
    }
}

Habe ich einen Kommentar auf der Zeile, wo der JSON-Daten zur Verfügung gestellt. Ich würde eher nicht brechen übereinkommen mit meinem JavaScript-Objekte durch die richtige Gehäuse-Eigenschaft Mitglieder, und ich sicherlich nicht wollen, zu brechen convention, die von dem unteren Gehäuseteil, sind meine C# - Eigenschaften. Irgendwelche Gedanken?

Kommentar zu dem Problem
Ich bin ein bisschen verwirrt hier. Sie senden die Daten in einer POST-Anforderung - in anderen Worten, innerhalb eines request-body. Aber in der HTTP-Dokumentation heißt es, dass die header-Felder (und Werte) berücksichtigt groß-und Kleinschreibung unterschieden, und es gibt nichts über den Körper... Warum denkst du "es ist nicht das Verhalten für form-urlencoded Daten", Frage ich mich? Kommentarautor: raina77ow
Check diese Diskussion, zum Beispiel. Kommentarautor: raina77ow
@raina77ow ist Dies nicht wirklich eine Frage, über die HTTP-Spezifikation, aber das Verhalten von JSON.NET formatter verwendet ASP.NET WebAPI RC. Die FormUrl formatter scheint die groß-und Kleinschreibung unterschieden, während die JSON.NET formatter ist groß-und Kleinschreibung. Kommentarautor: Phil Klein
Ich denke, der groß-und Kleinschreibung korrekt ist. Warum würden Sie brauchen, Fall-Gefühllosigkeit, während C# und JavaScript sind sowohl groß-und Kleinschreibung? Kommentarautor: Aliostad
Ich merke, dass Sie sowohl groß-und Kleinschreibung, aber der Wert, den Anbieter oder formatter verwendet, für parameter Bindung nicht brauchen, um groß-und Kleinschreibung, wie gezeigt, durch das Verhalten von form-urlencoded Daten. Ich werde zu aktualisieren, die Frage zu reflektieren. Danke. Kommentarautor: Phil Klein

InformationsquelleAutor der Frage Phil Klein | 2012-06-29

Schreibe einen Kommentar