0

im using $ resource с помощью метода save для отправки информации малине с помощью API vNext (.net core).

Когда я использую метод запрос или получить от $ ресурса его работы, но когда я использую сохранить сервер возвращает 415 неподдерживаемый Тип носителя.

это мой запрос ресурса, см-им параметр Content-заголовок типа:

var req = $resource(raspUrl + resource, data || {}, 
      { 
       save: { 
         method: 'POST', 
         headers: { 'Content-Type': 'application/json' } 
       }, 
       post: { 
         method: 'POST', 
         headers: { 'Content-Type': 'application/json' } 
       } 
      }); 

req.save({name: 'Argate', city: "Campinas - São Paulo"}) 

Посмотрите, что Угловая JS делать, когда это делать запрос:

  • Запрос URL: http://192.168.100.100:5000/api/caixa?dataAbertura=2016-01-12&nuvem=0&sangria=0&sequencia=1&usuarioId=6

    Метод запроса: ОПЦИИ

    Принимать: /

    Accept-Encoding: GZIP, выкачать, SDCH

    Accept-Language: EN-US, ан, Q = 0,8, PT, Q = 0,6, FR, Q = 0,4, автофокусировка; д = 0,2, то; д = 0,2

    Access-Control-Request-заголовки: Content-Type

    Access-Control-Request-метод: POST

    Cache-Control: нет-кэша

    Подключение: держать-жив

    Ведущий: 192.168.100.100: 5000

    Происхождение: http://127.0.0.1:8080

    Pragma: нет кэша

    Referer: http://127.0.0.1:8080/

    User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Сложение/MRA58N)

    AppleWebKit/537,36 (KHTML, как Gecko) Chrome/46.0.2490.76 Мобильный Сафари/537,36

Когда отправить на сервер, AngularJS отправить с помощью метода reqeust "Опции" , сервер не получит запрос.

XMLHttpRequest не может загрузить http://192.168.100.100:5000/x/lorem. Ответ на запрос перед полетом не проходит проверку контроля доступа. Нет заголовка «Access-Control-Allow-Origin» на запрошенном ресурсе. Origin 'http://127.0.0.1:8080', следовательно, не допускается. В ответе был код статуса HTTP 415.

Как я могу его решить? Спасибо всем :)

ответ

0

@lvanegmond из GitHub помочь мне в этом посте:

https://github.com/aspnet/Mvc/issues/5591#issuecomment-264961434

с этим решением:

Попробуйте положить app.UseCors ("CorsPolicy"); перед app.UseMvc();

Из документов: https://docs.microsoft.com/en-us/aspnet/core/security/cors#enabling-cors-with-middleware

Чтобы включить CORS для всего приложения добавить промежуточное CORS в вашего трубопровода запроса с использованием методы расширения UseCors. Обратите внимание: промежуточное ПО CORS должно предшествовать любым определенным конечным точкам в вашем приложении , что вы хотите поддерживать запросы с кросс-началом (например, перед любым вызовом UseMvc).

1

Вот несколько способов решить эту проблему:

Лучший: заголовок CORS (требует изменений сервера)

CORS (Cross-Origin Resource Sharing) является способом для сервер сказал: «Я приму ваш запрос, даже если вы пришли из другого источника». Для этого требуется сотрудничество с сервером, поэтому, если вы не можете изменить сервер (например, если вы используете внешний API), это подход не будет работать.

Измените сервер, чтобы добавить заголовок Access-Control-Allow-Origin: *, чтобы включить запросы перекрестного происхождения из любого места (или указать домен вместо *). Это должно решить вашу проблему.

второй выбор: Прокси-сервер

Если вы не можете изменить сервер, вы можете запустить свой собственный прокси-сервер. И этот прокси-сервер может вернуть заголовок Access-Control-Allow-Origin, если он не совпадает с тем же происхождением, что и ваша страница.

Вместо того, чтобы отправлять запросы API на какой-либо удаленный сервер, вы будете отправлять запросы на свой прокси-сервер, который отправит их на удаленный сервер. Вот несколько опций прокси.

третий выбор: JSONP (требуется поддержка сервера)

Если CORS и прокси-сервер не работает для вас, JSONP может помочь. Вы по существу сделать запрос GET с параметром обратного вызова:

(получить) http://api.example.com/endpoint?callback=foo Сервер будет обернуть ответ JSON в вызове функции для обратного вызова, где вы можете справиться с этим:

Foo ({ "ваш ":" json ", здесь: true}) Есть некоторые недостатки, особенно, что JSONP поддерживает только запросы GET и что вам все еще нужен кооперативный сервер.

+0

Мой сервер - это приложение vNext .net core. Я поместил метод атрибута (ActionFilterAttribute), переопределяющий OnActionExecuting, и он выполняется перед всем запросом. Когда я делаю запрос GET, он выполняется корректно, но когда метод POST не работает. –