Nancy模型绑定无法在Chrome,IE中运行

时间:2013-07-24 15:13:20

标签: c# javascript ajax nancy

我在我的某个应用程序中遇到过这个问题,并将其删除并设置了一个小问题,但问题仍然存在。

我发布了以下对象(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
    });
};

然后将数据与服务器上的以下代码绑定

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),所有浏览器之间的post请求完全相同。我也在其他机器上对此进行了测试,排除了我的机器和/或浏览器的问题。

有什么想法吗?我不明白浏览器如何影响Nancy模型绑定...

1 个答案:

答案 0 :(得分:8)

简单的答案是您的内容类型无效。尽管人们可能会告诉你,但没有application/json, charset=utf-8内容类型。尽管charset是内容类型的有效,可选的扩展,但它不适用于application/json

您可以在6 IANA considerations

部分http://www.ietf.org/rfc/rfc4627.txt?number=4627下阅读此处
  

JSON文本的MIME媒体类型是application / json。

     

类型名称:应用程序

     

子类型名称:json

     

必填参数:不适用

     

可选参数:不适用

有关编码的附加说明

  

编码注意事项:如果是UTF-8,则为8位;二进制,如UTF-16或UTF-32

 JSON may be represented using UTF-8, UTF-16, or UTF-32.  When JSON
 is written in UTF-8, JSON is 8bit compatible.  When JSON is
 written in UTF-16 or UTF-32, the binary content-transfer-encoding
 must be used.

简而言之,JSON已经隐含地utf-8。事实上,根据3. Encoding部分,它说明了

  

JSON文本应以Unicode编码。默认编码为UTF-8。

发送application/json,您应该设置为

希望这会有所帮助: - )