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?
InformationsquelleAutor der Frage Phil Klein | 2012-06-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Json.NET formatter ist der groß-und Kleinschreibung für die Deserialisierung (json -> CLR).
Zur Serialisierung, können Sie Kamel-Gehäuse durch die Verwendung der CamelCasePropertyNamesContractResolver.
In Ihr Global.asax:
InformationsquelleAutor der Antwort Mike Wasson
Nach dem Graben in dieser Frage in bedeutender Tiefe, kam ich zu erkennen, dass ich schlagen ein Fehler in der Json.NET KeyValuePair-Konverter. James Newton-King war freundlich genug, zu beantworten meiner Frage und ein link zum Update:
Json.NET der groß-und Kleinschreibung Eigenschaft der Deserialisierung
InformationsquelleAutor der Antwort Phil Klein