Фон: - Я создал службу WCF, размещенную в моей локальной системе IIS. Служба предоставляет метод GET/POST и разрешен кросс-домен и может быть доступен с помощью https. Чтобы сделать его доступным, используется самозаверяющий сертификат.Сообщение JSON ajax request with cors не работает в IE10/Edge
Тестирование: - Когда я пытаюсь сделать кросс домена Ajax называют это отлично работает для запроса GET и POST запроса (только те, после метода, которые не принимают данные в виде JSON) в IE10/Edge. Я могу сделать перекрестный вызов домена для любого запроса GET/POST в браузере Chrome/Firebox. Только IE 10/Edge вызывает проблему для перекрестного вызова домена для запроса POST, когда параметр contenttype: accept/json передается в ajax-вызове.
Исследование: - Я прочитал много блогов/mdn и узнал спецификацию cors, в которой IE не следует религиозным отношениям. Я знаю, что спецификация cors не соответствует произвольному значению заголовка/заголовка, из-за которого префикс cors прервался.
Пример запроса Ajax я делаю: -
var postDT = { "postValue": "test" };
debugger;
$.support.cors = true;
$.ajax({
type: "POST",
data: JSON.stringify(postDT),
url: "http://ateet3371/Service1.svc/postdata",
contentType: "application/json; charset=utf-8",
dataType: "JSON",
processData: true,
success: function (data) {
alert(data);
},
error: function (jqXHR, textStatus, errorThrown) {
var a = jqXHR;
alert(jqXHR + '---' + textStatus + '---' + errorThrown);
}
});
Если я удалил contentType: "application/json; charset=utf-8"
то бросить плохую ошибку запроса иначе это бросить ошибку доступа.
и метод реализации в ФОС: -
[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, UriTemplate = "PostResponseData")]
string PostResponseData(PostDataTest postDT);
И DataContract является: -
[DataContract]
public class PostDataTest
{
private string post_value;
// Apply the DataMemberAttribute to the property.
[DataMember]
public string postValue
{
get { return post_value; }
set { post_value = value; }
}
}
Если я использовать данные PostUrl метод затем Ajax вызов выполняется успешно и возвращать правильные результаты, если ContentType: Заголовок «Приложение/json» удаляется из запроса.
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "PostUrlData/{value}")]
string PostUrlData(string value);
Я уже писать код в BeginRequest события в Global.asax ФОС для обработки запроса опции: -
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
//These headers are handling the "pre-flight" OPTIONS call sent by the browser
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, HEAD");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials", "true");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Origin, Content-Type, Accept, X-Requested-With, Session");
HttpContext.Current.Response.AddHeader("Access-Control-Expose-Headers", "DAV, content-length, Allow");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache,no-store");
HttpContext.Current.Response.End();
}
И я не могу позволить Allow cross domain call
настройки в IE, как конечный пользователь не делайте такие шаги.
Застрял в проблеме: - Но все еще не в состоянии выполнить JSON-сообщение в IE 10/Edge (которые разрешены cors).
(Edited) Обновления: сайт IIS, где размещается WCF только анонимной проверки подлинности включен в то время как другие аутентификации отключены. Даже я пробовал с действительным сертификатом для https, но все же он не работает для IE, но отлично работает для хром.
заголовка запроса
OPTIONS https://service.domian.com/projectservice.svc/GetMultiListData HTTP/1.1 Accept: */* Origin: https://sitename.servicedomain.com Access-Control-Request-Method: POST Access-Control-Request-Headers: content-type, accept Accept-Encoding: gzip, deflate User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko Host: sitename.servicedomain.com Content-Length: 0 Connection: Keep-Alive Cache-Control: no-cache
Response Headers
HTTP/1.1 200 OK Cache-Control: no-cache,no-store Server: Microsoft-IIS/7.5 Access-Control-Allow-Origin: sitename.servicedomain.com Access-Control-Allow-Methods: GET,POST,PUT,HEAD Access-Control-Allow-Credentials: true Access-Control-Allow-Headers: Origin,Content-Type,Accept,X-Requested-With,Session Access-Control-Expose-Headers: DAV,content-length,Allow Access-Control-Max-Age: 1728000 X-Powered-By: ASP.NET Date: Thu, 04 Aug 2016 17:26:27 GMT Content-Length: 0
Пожалуйста, помогите меня, поскольку я просматриваю множество статей и блога и все еще не в состоянии решить проблему. Ваша помощь будет принята с благодарностью!
EXPERT ПОЖАЛУЙСТА, ПОМОГИТЕ МЕНЯ!
ли изменение DATATYPE к "JSONP" разрешить запрос? –
Я попробовал, он разрешает запрос, но ошибается ошибка запроса. – ateet