gpt4 book ai didi

jquery - XDomainRequest json POST 正文未在 ASP.NET Web API 调用上反序列化

转载 作者:行者123 更新时间:2023-12-01 00:57:19 28 4
gpt4 key购买 nike

作为为 MVC4 Web 应用程序对 MVC4 Web API 应用程序进行 ajax 调用实现跨浏览器、跨域支持的解决方案的一部分,我使用 XDomainRequest 对象来提供支持用于 IE < 10 个客户端进行的跨域 ajax 调用。

我在处理 POST 操作时遇到问题,其中请求正文中包含 JSON,我希望在 Web api 端对其进行反序列化。

当使用 XDomainRequest 从 IE < 10 进行调用时,我无法显式指定 application/json 作为请求的内容类型(因为使用 XDomainRequest 时无法修改 header ),因此 JSON 不会被反序列化为方法签名中指定的类型。

请注意,跨域 GET 操作在所有浏览器中都可以正常工作,因此我已针对 CORS 等正确配置了 Web api。

考虑在 Web API 上定义的以下 POST 操作:

public int Customer(Customer customer) {}

即使请求正文中存在表示为 JSON 的 Customer 对象,在进行调用时 customer 也始终为 null使用 IE < 10 的 XDomainRequest。发生这种情况是因为 XDomainRequest 生成的请求缺少 content-type: application/json 请求 header 。

有没有办法在 Web API 端处理此问题,以便即使请求中未指定内容类型,我也可以强制正确反序列化 JSON 正文?

我读过有关模型绑定(bind)程序的内容,但不清楚这是否是它们的用途。

这是我的 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);
}

最佳答案

您可以编写一个委托(delegate)消息处理程序,在其中将传入请求内容的内容类型 header 设置为 application/json(如果尚未存在)。

关于jquery - XDomainRequest json POST 正文未在 ASP.NET Web API 调用上反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13479754/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com