2016-08-19 4 views
0

прямо сейчас Я тестирую свой сайт reactjs на locahost: 3333 и мой asp.net web api 2 на localhost: 54690.Как включить CORS? Sever? Javascript? где?

Я использую axios для моего ajax, но когда я делаю запрос, я получаю сообщение об ошибке.

XMLHttpRequest не может загрузить http://localhost:54690/api/Storage/Get. Ответ на предполетный запрос не проходит проверку контроля доступа: Нет Заголовок «Access-Control-Allow-Origin» присутствует на запрошенном ресурсе . Origin 'http://localhost:3333' поэтому не допускается доступ. Ответ получил код состояния HTTP 500.

Я попытался добавить Корса, но думаю, что я не делаю это правильно. Я попробовал серверную и клиентскую стороны.

var instance = axios.create({ 
      baseURL: 'http://localhost:54690/api', 
      timeout: 1000, 
      headers: { 'Access-Control-Allow-Origin': '*' } 
     }); 

     instance.get('/Storage/Get') 
      .then(function (response) { 
       console.log(response); 
      }) 
      .catch(function (error) { 
       console.log(error); 
      }); 

стороне сервера

[EnableCors(origins: "http://localhost:3333/", headers: "*", methods: "*")] 
public class StorageController : ApiController 

WebapiConfig.

public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      config.Filters.Add(new EnableQueryAttribute()); 

      // Web API configuration and services 

      // Web API routes 
      config.MapHttpAttributeRoutes(); 

      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 

      config.EnableCors(); 
     } 
    } 

Редактировать

Кажется, когда я делаю это

[EnableCors (происхождение: "", заголовки: "", методы: "*")]

это работает , Мне даже не нужно вставлять что-нибудь в заголовок для моего ajax. Хотя это не настоящая душа, поскольку я не хочу, чтобы это происходило в производстве, я предполагаю?

Также есть глобальная функция, которую я могу установить на корс? Kinda отстой, чтобы поставить его на каждый контроллер.

Edit 2

смотрит больше в связи с @ kormali_2 я вижу, что проблема может быть потому, что у меня есть «http://locahost:3333/», где он должен быть «http://locahost:3333» также есть глобальный вариант я могу использовать.

+0

Вы использовали System.Web.Http.Cors; '? http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api –

+0

Да для моего контроллера у меня есть System.Web.Http.Cors; – chobo2

+0

добавление заголовков заголовков сторон не имеет смысла. –

ответ

0

Вы можете включить CORS глобально с этим:

// Enable CORS globally for any host 
var corsAttr = new EnableCorsAttribute("*", "*", "*"); 
config.EnableCors(corsAttr); 

Чтобы включить его только для конкретного хоста, который вы будете использовать:

// Enable CORS globally for specific host 
var corsAttr = new EnableCorsAttribute("http://localhost:3333", "*", "*"); 
config.EnableCors(corsAttr); 

Дополнительная информация на http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api#enable-cors

0

Попробуйте это:

var instance = axios.create({ 
     baseURL: 'http://localhost:54690/api', 
     timeout: 1000, 
     headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json', 
     'Access-Control-Allow-Origin': '*' 
     } 
    }); 
+1

Нет, это не сработало. Такая же ошибка. – chobo2

+1

этот ответ не имеет смысла. указанный заголовок не принадлежит на стороне запроса уравнения. –