2016-12-17 4 views
-1

Я учусь Угловой 2. Это моя служба, которая должна извлекать данные из приложения ASP.NET Web api.Как включить Cors в ASP.NET Web Api

@Injectable() 
export class ExpenseService { 
    private _expUrl = "http://localhost:65400/api/expenses"; 

    constructor(private _http: Http){}  

    getExpenses(): Observable<IExpense[]> { 
    return this._http.get(this._expUrl) 
     .map((response: Response) => <IExpense[]>response.json()) 
     .do(data => console.log('ALL: ' + JSON.stringify(data))) 
     .catch(this.handleError) 
    }  
    //more here... 
} 

Приведенный выше код отлично работает в Microsoft Edge. Тем не менее, в Chrome и FireFox, я получаю следующее сообщение об ошибке:

XMLHttpRequest cannot load http://localhost:65400/api/expenses. 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost:3000' is therefore not allowed 

Я позволил CORS в моем веб-апи как это было предложено много сообщений.

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddCors(); 
    //... 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
     ILoggerFactory loggerFactory) 
{ 
    //... 
    app.UseCors(builder => 
      builder.WithOrigins("http://localhost:3000/")); 
} 

Это не изменило результат. Я по-прежнему получаю ту же ошибку в Chrome и FireFox, а Edge работает нормально.

Спасибо за помощь

+1

Клиент абсолютно никакого отношения, CORS должны быть реализованы на стороне сервера, и это браузер, который определяет его доступность, а не JavaScript. Ваш вопрос должен заключаться в том, как реализовать его в .NET не угловатым. Это не должно быть трудно исследовать ... Есть тысячи вопросов CORS на этом сайте, целые веб-сайты, посвященные этому, и множество других веб-ресурсов. – charlietfl

+1

Ребята, прекратите голосовать каждый вопрос. Я ничего не знаю о CORS. Я получаю сообщение об ошибке, поэтому я ищу помощь здесь. Должен ли я изменить заголовок? – Richard77

+1

Да, и вам следует провести некоторое исследование. Сотни вопросов CORS задаются каждую неделю – charlietfl

ответ

2

CORS является то, что исполняются клиентом, поддерживается сервером.

CORS поможет вам как пользователю. Это ограничивает возможность для клиента, например javascript на хосте google.com, вызывать услугу на mydomain.com. Это междоменный вызов, который Chrome и FireFox не разрешают. (Предположим, что Edge также поддержал это). Если у вас есть служба и клиент на каком-то хосте и порту, CORS не используется.

Служба должна определить, какой хост из междоменного домена разрешен. Это может быть либо от всех, либо от конкретного хоста.

Чтобы разрешить доступ из все хоста выполните следующие действия:

Конфигурации

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddCors(); 
} 

Контроллер

[EnableCors("AllowSpecificOrigin")] 
public class TestController : ApiController 

Если ваша служба является государственной службой, следует обращать внимание на последствия.

Вы можете прочитать здесь: Код на стороне https://docs.microsoft.com/en-us/aspnet/core/security/cors

+0

Я использую ядро ​​asp.net. – Richard77

+0

Добавьте это как тег, я не знаю. Но это тот же принцип. Следуйте по ссылке .... – Michael

+0

Я тоже посмотрел на эту ссылку. http://www.dotnetfunda.com/articles/show/3349/pagination-in-angularjs-by-resolving-cors-in-web-api-with-aspnet-core – Richard77

Смежные вопросы