我一直在我的一个应用程序中遇到此问题,并对其进行了简化并设置了一个小型测试环境,在该环境中仍然会出现问题。

我正在发布以下对象(JSON)

{
    "eventName":"Testing from Services",
    "tickets":10,
    "_date":"10/10/2013",
    "_time":"8:00 PM",
    "ticketsLocation":"Testing from Services",
    "date":"2013-10-11T00:00:00.000Z"
}

使用以下ajax调用
self.save = function (item, url, success) {
    $.ajax({
        type: "post",
        data: JSON.stringify(item),
        contentType: "application/json, charset=utf-8",
        traditional: true,
        datatype: "json",
        url: self.domain + url,
        success: success,
        error: self.error
    });
};

然后在服务器上使用以下代码绑定(bind)数据
var Model = this.Bind<PropertyType>();

其中PropertyType是正确的类型(Event)。

这是Event类供引用
public class Event
{
    public string EventName { get; set; }
    public int Tickets { get; set; }
    public Venue Venue { get; set; }
    public string TicketsLocation { get; set; }
    public DateTime Date { get; set; }
    public List<EventRequest> Requests { get; set; }
}

这在Firefox中工作得很好。在Chrome和IE中,Model最终是带有所有空值的Event对象。据我所知(通过使用Fiddler),发布请求在所有浏览器之间是完全相同的。我还在其他机器上对此进行了测试,排除了我的机器和/或浏览器的问题。

有任何想法吗?我不了解浏览器如何影响Nancy模型绑定(bind)...

最佳答案

简单的答案是您的内容类型无效。尽管人们会告诉您什么,但是没有application/json, charset=utf-8内容类型。即使charset是对内容类型的有效,可选扩展,它也不适用于application/json
您可以在6 IANA considerations部分的http://www.ietf.org/rfc/rfc4627.txt?number=4627中了解此信息



关于编码的附加说明



简而言之,JSON已经隐式为utf-8。实际上,在3. Encoding部分下,



发送application/json,您应该已准备就绪

希望这可以帮助 :-)

10-05 20:38
查看更多