Да, у меня есть бесчисленное количество статей и я перестроил добавление app.UserCors и другие советы, но я все еще застрял.
Использование Visual Studio WebAPI Core 2 с веб-интерфейсом Angular 2.
Использование проверки подлинности Windows на удаленном сервере с использованием IIS 8.5 (на самом деле это тоже не работает локально).
Конфигурация запуска WebAPI:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<SomeContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SomeDB")));
//////// ********************
//////// Setup CORS
//////// ********************
var corsBuilder = new CorsPolicyBuilder();
corsBuilder.AllowAnyHeader();
corsBuilder.AllowAnyMethod();
corsBuilder.WithOrigins("*");
corsBuilder.AllowCredentials();
services.AddCors(options =>
{
options.AddPolicy("AllowAll", corsBuilder.Build());
});
services.AddMvc();
...
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors("AllowAll"); //<===
app.UseMvc();
...
Когда я запускаю WebAPI локально или развертываю его на удаленном сервере, интерфейс My Angular 4 дает мне:
Для вызова контроллера WebAPI - 401 (Неавторизованный) (даже на контроллерах, для которых не установлено [Authorize()]
.
Когда я пытаюсь использовать свой локальный экземпляр приложения Angular для доступа к удаленному WebAPI:
На запрошенном ресурсе отсутствует заголовок Access-Control-Allow-Origin. Следовательно, к источнику "http://localhost:62482" не разрешен доступ. Ответ имел код состояния HTTP 401.
Я пробовал изменить порядок добавления сервисов в автозагрузке.
Я вручную добавил заголовки respone в IIS8.5 (они перезаписываются при развертывании нового кода).
Я полностью удалил все материалы CORS из приложения WebAPI.
Я КЛЯНУТЬСЯ, все это работало одновременно. Не уверен, что изменилось.
У меня все работает нормально, когда я развертываю и приложение WebAPI Core 2, и веб-приложение Angular на удаленном сервере, потому что источники одинаковы, но это делает локальную отладку невозможной.
*** Угловой код РЕПО по запросу:
import { Injectable, Inject } from '@angular/core';
import { Http } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import { DocumentModel } from '../models/document.model';
import 'rxjs/add/observable/from';
import 'rxjs/add/operator/map';
import { map } from 'rxjs/operators/map';
import { IRepository } from './IRepository';
declare var API_URL: string;
@Injectable()
export class DocumentRepository implements IRepository<DocumentModel, number> {
GetByDocument(key: any): Observable<DocumentModel[]> {
throw new Error("Method not implemented.");
}
private httpService: Http;
private apiRootUrl: string;
constructor(http: Http) {
this.httpService = http;
this.apiRootUrl = API_URL;
}
Create(Model: DocumentModel): Observable<any> {
throw new Error("Method not implemented.");
}
Find(key: any): Observable<DocumentModel[]> {
return this.httpService.get(this.apiRootUrl +'documents/mine').map(result => result.json());
}
Get(id: any): Observable<DocumentModel> {
return this.httpService.get(this.apiRootUrl +'documents/' + id).map(result => result.json());
}
}
app.UseCors(builder => builder.WithOrigins("http://localhost") .AllowAnyHeader() );
и также опубликовать свою угловую настройку ... @ user3637002 - person Vaibhav Kumar Goyal   schedule 27.08.2018WithOrigins("*")
наAllowAnyOrigin
. И попробуйте добавить его в свой контроллер вручную, чтобы протестировать его с атрибутом[EnableCors("AllowAll")]
- person penleychan   schedule 27.08.2018