Реализация CORS, показывающая метод, недопустимый для запроса POST

Я пытаюсь вызвать метод службы WCF, используя запрос Http POST из другого проекта, он разрешает запрос GET, но когда я пытаюсь выполнить запрос POST, он показывает «Метод не разрешен».

Когда я попробовал, он показывает эту ошибку в моей консоли:

Доступ к XMLHttpRequest в 'http://localhost:7280/api/values/24' из origin 'http://localhost:6538' заблокирован политикой CORS: ответ на запрос предварительной проверки не передает доступ контрольная проверка: не имеет статуса HTTP ok.

Веб-API: Метод:

[WebInvoke(UriTemplate = "/values", Method = "POST", ResponseFormat = WebMessageFormat.Json), CorsEnabled]
        void AddValue(string value);

Реализация метода

public void AddValue(string value)
        {
            string id = nextId.ToString();
            nextId++;
            allValues.Add(id, value);
            string location = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri.ToString() + "/" + id;
            WebOperationContext.Current.OutgoingResponse.SetStatusAsCreated(new Uri(location));
        }

Клиентское приложение:

$("#post").click(function () {
            var data = "\"" + $("#value").val() + "\"";
            $.ajax({
                url: valuesAddress,
                type: "POST",
                contentType: "application/json",
                data: data,
                success: function (result) {
                    $("#result").text(result);
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    $("#result").text(textStatus);
                }
            });
        });

Я подписался на https://code.msdn.microsoft.com/Implementing-CORS-support-c1f9cd4b/view/SourceCode#content Я создал веб-API и клиентское приложение как разные проекты. Пожалуйста, помогите решить эту проблему.


person TechportSolutions    schedule 27.05.2019    source источник
comment
Для конфигурации cors в wcf вы можете попробовать добавить заголовки cors и разрешить метод опций в Application_BeginRequest в global.asax, см. https://www.codeproject.com/Articles/845474/Enhibited-CORS-in-WCF   -  person Ackelry Xu    schedule 28.05.2019
comment
Я пытаюсь вызвать метод службы WCF, используя запрос Http POST из другого проекта. Я пробовал использовать решение в codeproject.com/Articles/845474/Enhibited-CORS-in-WCF, но не сработало. Не могли бы вы предложить какие-либо другие решения.   -  person TechportSolutions    schedule 02.06.2019


Ответы (2)


У меня самого была проблема с CORS, вот как я это сделал в asp.net (то же самое, судя по вашим тегам):

  • Я установил следующий пакет NuGet:
    # P2 #
  • Затем в вашем файле WebApiConfig:
        public static void Register(HttpConfiguration config)
        {
            EnableCorsAttribute cors = new 
                 EnableCorsAttribute("*", "*", "*");
            config.EnableCors(cors);

            AddRoutes(config);
        }

Вы уже выполнили этот шаг, просто переместите метод EnableCors(cors) над AddRoutes(config);

  • Наконец, вы помещаете следующий атрибут над SaveWithPost:
[EnableCors(origins: "http://mywebclient.azurewebsites.net", headers: "*", methods: "*")]

Примечание. Если вы продолжаете получать эту ошибку:

ОПЦИИ http://localhost/Service1.svc/saveWithPost/WithParameter 405 (метод запрещен) Доступ к XMLHttpRequest в "http://localhost/Service1.svc/saveWithPost/WithParameter" из origin 'http://localhost' заблокирован политикой CORS: ответ на предварительный запрос не проходит проверку контроля доступа: он не имеет статуса HTTP ok.

Прочтите здесь официальная документация Microsoft. По ссылке вы попадете в раздел «Как работает Cors», где вы можете узнать больше о предполетных запросах. Вскоре браузер отправляет дополнительный запрос перед фактическим запросом. Дополнительные сведения см. здесь.

Другое примечание: проверьте, не блокируете ли вы запрос OPTIONS. Например, некоторые компании используют программное обеспечение для обеспечения безопасности, сетей и хранения данных на основе сетевых устройств и облачных сервисов, которые ФИЛЬТРУЮТ все предстоящие запросы к их собственному серверу, что иногда может привести к этому. (скорее всего, не)

Надеюсь это поможет,

Ваше здоровье

person G.Dimov    schedule 27.05.2019
comment
Я пробовал это, но получаю ту же ошибку. Метод запрещен. - person TechportSolutions; 01.06.2019

Вы включили атрибут Cors при просмотре документация MSDN указывает, что вы должны указать атрибут над классом или методом. Приведенный ниже код позволяет всем методам класса называться перекрестным доменом.

[EnableCors(origins: "*", headers: "*", methods: "*")]
public class Service1 : IService1
{
  // Details omitted
}

Приведенный ниже код включает cors для метода GetAllStudents.

public class Service1 : IService1
{
  [EnableCors(origins: "*", headers: "*", methods: "*")]
  List<string> GetAllStudents()
  {
    // Details omitted
  }
}
person M.B.    schedule 27.05.2019
comment
до сих пор не работает. Я следил за документом шаг за шагом, но не работал. Пример в документе содержит HTML и сервис в одном проекте, и моя проблема в том, что у меня есть отдельный веб-уровень и сервисный уровень. - person TechportSolutions; 22.06.2019