簡體   English   中英

ASP.NET WebAPI JSON綁定案例敏感性

[英]ASP.NET WebAPI JSON Binding Case-Sensitivity

從ASP.NET WebAPI Beta升級到RC已經提供了一些興奮和很多挫折感。 我已經能夠解決大多數問題,但現在咬我的是JSON請求數據的區分大小寫。

用於JSON請求的格式化程序(默認情況下是JSON.NET格式化程序)似乎區分大小寫,而用於表單urlencoded數據的格式化程序則不區分大小寫。 有沒有辦法配置JSON請求以使用不區分大小寫的格式化程序?

這是一個簡單的例子來說明我對JSON請求的問題:

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);
    }
}

我已經提供了關於提供JSON數據的行的注釋。 我寧願不通過適當的外殼屬性成員來破壞我的JavaScript對象的約定,我當然不希望通過降低我的C#屬性來破壞約定。 有什么想法嗎?

Json.NET格式化程序對反序列化(json - > CLR)不區分大小寫。

在序列化時,您可以使用CamelCasePropertyNamesContractResolver獲取camel大小寫。

在你的Global.asax中:

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

在深入研究這個問題之后,我意識到我在Json.NET KeyValuePair轉換器中遇到了一個錯誤。 James Newton-King非常友好地回答了我的相關問題並提供了修復的鏈接:

Json.NET不區分大小寫的屬性反序列化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM