Ответ на предварительную проверку имеет неверный код состояния HTTP 405 AngularJS

Я получаю эту ошибку:

XMLHttpRequest не может загрузить http://apidev.facu.la/api/json/infotag/search/?criteria=&infotagType=book&companyid=2. Ответ на предварительную проверку имеет недопустимый код состояния HTTP 405 при попытке выполнить этот вызов httpget:

  $http({
                method: 'GET',
                dataType: "json",
                url: 'http://apidev.facu.la/api/json/infotag/search/?criteria=&infotagType=book&companyid=2',
                headers: {
                    "Content-Type": "application/json"
                }
            }).then(function successCallback(response) {
                alert('ok');
            }, function errorCallback(response) {
                alert('error');
                console.log(response);
            });

Есть идеи, что мне не хватает? Звонки почтальона работают нормально.

Обновлять

Код конечной точки:

  [WebInvoke(Method = "GET",
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare,
            UriTemplate = "/json/infotag/search/?criteria={criteria}&infotagType={infotagType}&companyid={companyid}")]
        public XElement InfoTagSearchXML_json(string criteria, string infotagType, int companyid)
        {
            return InfoTagSearchXML(criteria, infotagType, companyid);
        }

person Laziale    schedule 09.06.2016    source источник
comment
Недопустимый метод (код состояния 405) означает, что на вашей конечной точке не определен метод OPTIONS. Это обязательно для запросов CORS. См. CORS. Можете ли вы предоставить какие-либо сведения о своей конечной точке? (язык, фреймворки и т. д.)   -  person KRONWALLED    schedule 09.06.2016
comment
@Kronwalled только что добавил вызов в тело вопроса. Спасибо за помощь!   -  person Laziale    schedule 09.06.2016


Ответы (2)


Вы можете добавить WebInvoke для параметров метода в свой ServiceContract следующим образом:

[ServiceContract]
public interface ITestService
{
    [WebInvoke(Method = "OPTIONS", UriTemplate = "*")]
    void getOptions();

    ... other invokes
}

public class Service : ITestService
{
    public void getOptions()
    {
        WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*");
        WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Methods", "GET, OPTIONS");
        WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Headers", "Content-Type");
    }

    ... other invokes
}
person KRONWALLED    schedule 09.06.2016
comment
Спасибо @Kronwalled. Как только я добавлю это, как я могу использовать его для своего звонка? Или это единственное, что мне нужно сделать? - person Laziale; 09.06.2016
comment
Он должен автоматически вызываться при запуске запроса GET. - person KRONWALLED; 09.06.2016
comment
Получение этой ошибки после изменений i.gyazo.com/83267cb7a48c2a1167c015f83b160079.png - person Laziale; 09.06.2016
comment
Не могли бы вы обновить пост, как весь сервис выглядит прямо сейчас? - person KRONWALLED; 09.06.2016

Сделайте следующее:

 Install-Package Microsoft.AspNet.WebApi.Cors

затем перейдите в Web.config и удалите эти строки (если они у вас есть)

<remove name="X-Powered-By" />
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Accept, Content-Type, Origin" />
<add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, OPTIONS" />

и добавьте следующий код в файл WebApiConfig.cs из папки App_Start:

var enableCorsAttribute = new EnableCorsAttribute("*",
                          "Origin, Content-Type, Accept",
                          "GET, PUT, POST, DELETE, OPTIONS");
config.EnableCors(enableCorsAttribute);
person user_1856538_    schedule 28.07.2018