appAPI.request.post работает в Chrome, Firefox и Safari, но не в браузере IE.

Я создаю расширение для браузера с помощью crossrider. После того, как установка этого расширения завершена, необходимо вызвать службу wcf, она отлично работает в chrome, firefox и safari, но в IE показывает ошибку badrequest, т. е. ошибку 400. Ниже приведен мой код Crossrider.

 appAPI.request.post({
    url: 'http://183.82.102.245:8020/Service1.svc/json/GetAffiliatedUrlsCollection',
    onSuccess: function(response) {var site = appAPI.JSON.parse(response);
    AddUrlsToDB(site);
    },        
    onFailure: function(httpCode) {
        alert('Failed to retrieve content. (HTTP Code:' + httpCode + ')');
    },
    additionalRequestHeaders: {
        myHeader: 'value'
    },
    contentType: 'application/json'
});

следующий мой сервисный код

 [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "GetAffiliatedUrlsCollection", BodyStyle =     WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json)]
    List<UrlInfo> GetAffiliatedUrlsCollection();

Ниже приведены мои свойства

 [DataContract]
public class UrlInfo
{
    private string affiliatedurl; 
    public string websiteurl;
    public bool autoapprove;

    public UrlInfo(string websiteurl, string affiliatedurl, bool autoapprove)
    {
        this.websiteurl = websiteurl;
        this.affiliatedurl = affiliatedurl;
        this.autoapprove = autoapprove;
    }

    [DataMember]
    public string WebsiteUrl
    {
        get { return websiteurl; }
        set { websiteurl = value; }
    }

    [DataMember]
    public string AffilateUrl
    {
        get { return affiliatedurl; }
        set { affiliatedurl = value; }
    }

    [DataMember]
    public bool AutoApprove
    {
        get { return autoapprove; }
        set { autoapprove = value; }
    }
}

Затем Globla.asax

protected void Application_BeginRequest(object sender, EventArgs e)
    {
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
        if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
        {
            HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET,     POST");
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, x-requested-with");
            HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
            HttpContext.Current.Response.End();
        }
    }

person Surya    schedule 22.03.2014    source источник


Ответы (1)


Я протестировал следующий код на Win7/IE10, и ответ был получен, как и ожидалось. Вы вносили какие-либо изменения в свой сервер? Вы все еще испытываете проблему?

appAPI.request.post({
    url: 'http://183.82.102.245:8020/Service1.svc/json/GetAffiliatedUrlsCollection',
    onSuccess: function(response) {
        alert(response);
    },        
    onFailure: function(httpCode) {
        alert('Failed to retrieve content. (HTTP Code:' + httpCode + ')');
    },
    contentType: 'application/json; charset=UTF-8; charset-uf8'
});

[Раскрытие информации: я сотрудник Crossrider]

person Shlomo    schedule 23.03.2014
comment
Спасибо за Ваш ответ. Да, теперь он отлично работает в IE. Я не делал никаких изменений на своем сервере. Одна вещь, которую я наблюдаю здесь, это то, что если я удалю ( AdditionalRequestHeaders: {myHeader: 'value' },) строку кода из appAPI.request.post, то она работает нормально. Я не знаю, почему эта строка дает ошибку только в IE. - person Surya; 24.03.2014