Да, у меня есть бесчисленное множество статей и перестановка добавить приложение. UserCors и другие советы, но я все еще застрял.
Использование Visual Studio WebAPI Core 2 с веб-интерфейсом Angular 2.
Использование проверки подлинности Windows на удаленном сервере с использованием IIS 8.5 (на самом деле это также не работает локально).
Config запуска 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». Origin 'http://localhost:62482' поэтому не допускается. Ответ имеет HTTP-код состояния 401.
Я попытался изменить порядок добавления служб при запуске.
Я вручную добавил заголовки респона в IIS8.5 (они перезаписываются при каждом развертывании нового кода).
Я полностью удалил все содержимое CORS из приложения WebAPI.
I SWEAR все это работало одновременно. Не уверен, что изменилось.
У меня все работает нормально, когда я развертываю и приложение 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());
}
}