作为实现跨浏览器、跨域支持 MVC4 Web 应用程序对 MVC4 Web api 应用程序进行 ajax 调用的解决方案的一部分,我使用XDomainRequest对象来为 IE 进行的跨域 ajax 调用提供支持 < 10个客户。
我在使用请求正文中包含 JSON 的 POST 操作时遇到问题,我希望在 Web api 端反序列化。
当使用 XDomainRequest 从 IE < 10 进行调用时,我无法明确指定application/json
请求的内容类型(因为使用 XDomainRequest 时无法修改标头),因此 JSON 不会反序列化为方法签名中指定的类型。
请注意,跨域 GET 操作在所有浏览器中都可以正常工作,因此我为 CORS 等正确配置了我的 web api。
考虑在 web api 上定义的以下 POST 操作:
public int Customer(Customer customer) {}
即使在Customer
请求正文中存在表示为 JSON 的对象时,customer
总是null
在使用 IE < 10 的 XDomainRequest 进行调用时。发生这种情况是因为 XDomainRequest 生成的请求缺少content-type: application/json
请求标头。
有没有办法在 web api 端处理这个问题,以便即使请求中未指定内容类型,我也可以强制 JSON 正文正确反序列化?
我已经阅读了有关模型绑定器的信息,但不清楚这是否是它们的用途。
这是我的 XDomainRequest 代码供参考(仅供参考,这是对除 IE < 10 之外的所有浏览器使用 jQuery.ajax 的函数的一部分):
var xdr = new XDomainRequest();
if (xdr) {
xdr.open(method, url);
xdr.onload = function() {
var result = $.parseJSON(xdr.responseText);
if (result == null || typeof(result) == 'undefined') {
result = $.parseJSON(data.firstChild.textContent);
}
doneCallback(result);
};
xdr.onerror = function() {
failCallback();
};
xdr.onprogress = function() {
};
xdr.send(data);
}