我有以下脚本进行REST / WCF WEBGET调用以返回有效负载。当AppServer和Web Server在同一个域中时,它可以正常工作。
用户界面Javascript:
model.Source = new kendo.data.DataSource({
serverFiltering: true,
pageSize: 5,
type: 'GET',
transport: {
serverFiltering: true,
serverPaging: true,
serverGrouping: true,
read: {
dataType: "json",
crossDomain: true,
url: function () {
$('#ShowLink').hide();
var searchValue = $('#someBox')[0].value;
return $("#SearchUrl").val() + '/' + searchValue;
},
error: function (e) {
//some code
},
success: function (e) {
//some code
},
complete: function (e) {
//some code
}
}
},
schema: {
parse: function (response) {
if (response.length == 0) {
//some code
}
return response;
}
}
});
Application Server(WCF)
[WebGet(UriTemplate = "someresourceA/{id}/group/{searchText}",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
public IEnumerable<SomeDTO> SearchUrl(string id, string searchText)
{
var repository = _repositoryFactory.GetRepository<IRepo>();
return repository.GetData(searchText, int.Parse(id));
}
然而,当我做跨域请求时。 我收到以下错误
无法加载XMLHttpRequest HTTP:///App.Query.Service/SomeService.svc/resource/1/...%5D%5Bfield%5D=displayText&滤波器%5Bfilters%5D%5B0%5D%5BignoreCase%5D =真。 否&#39;访问控制 - 允许 - 来源&#39;标题出现在请求的上 的资源。起源&#39; http://localhost&#39;因此不允许访问。
为了解决这个问题,我在chrome浏览器上执行了以下命令,并显示了结果。
chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security
正确显示数据并将预期结果返回给浏览器。
但是我不想在生产环境中这样做。用户将启用浏览器Web安全性。因此上述解决方案不起作用。
有些人可以指出我正确的方向来避免这种情况,还是有替代解决方案?
我也尝试过webServer / web.config选项但没有用。
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
任何想法都非常感激。
答案 0 :(得分:1)
在您的Javascript ajax中,您需要对数据类型使用&#34; jsonp&#34; ,而不需要&#34; crossDomain:true,&#34;
read: {
dataType: "jsonp",
url: function () {
$('#ShowLink').hide();
var searchValue = $('#someBox')[0].value;
return $("#SearchUrl").val() + '/' + searchValue;
}
您需要修改&#34; App.Query.Service&#34; 项目中的 web.config 文件并添加以下标题:< / p>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
</system.webServer>
我遇到了这个问题,并且我也尝试过以下解决方案,但是通过以下解决方案,当我通过Fiddler监控时,我没有收到我的ajax Http响应中包含的标题(allow-origin)。
在WCF上进行1-CORS 实现:CustomHeaderMessageInspector:IDispatchMessageInspector 实现:EnableCrossOriginResourceSharingBehavior:BehaviorExtensionElement,IEndpointBehavior
根据此处的说明:http://enable-cors.org/server_wcf.html
2-在Global.ascx.cs中实现Application_BeginRequest()
希望它会有用。