【发布时间】:2012-11-08 21:45:53
【问题描述】:
作为对 MVC4 Web 应用程序进行 ajax 调用以实现对 MVC4 Web api 应用程序的跨浏览器、跨域支持的解决方案的一部分,我使用 XDomainRequest 对象来提供支持用于 IE
我在处理请求正文中包含 JSON 的 POST 操作时遇到问题,我希望在 Web api 端反序列化。
当使用 XDomainRequest 从 IE application/json 作为请求的内容类型(因为使用 XDomainRequest 时无法修改标头),因此 JSON 不是t 反序列化为方法签名中指定的类型。
请注意,跨域 GET 操作在所有浏览器中都可以正常工作,因此我为 CORS 等正确配置了我的 web api。
考虑在 web api 上定义的以下 POST 操作:
public int Customer(Customer customer) {}
即使在请求正文中存在表示为 JSON 的 Customer 对象,当使用 IE customer 始终为 null。发生这种情况是因为 XDomainRequest 生成的请求缺少 content-type: application/json 请求标头。
有没有办法在 web api 端处理这个问题,即使请求中没有指定内容类型,我也可以强制 JSON 正文正确反序列化?
我已经阅读了有关模型绑定器的信息,但不清楚这是否是它们的用途。
这是我的 XDomainRequest 代码供参考(仅供参考,这是对除 IE
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);
}
【问题讨论】:
标签: jquery asp.net-web-api xdomainrequest