Masalah .NET Core 2 WebAPI CORS dengan front end Angular 4 dan Windows Auth

Ya, saya memiliki artikel yang tak terhitung jumlahnya dan mengatur ulang menambahkan app.UserCors dan saran lainnya tetapi saya masih buntu.

Menggunakan Visual Studio WebAPI Core 2 dengan front end web Angular 2.

Menggunakan otentikasi Windows di server jauh menggunakan IIS 8.5 (sebenarnya ini juga tidak berfungsi secara lokal).

Konfigurasi permulaan 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();

...

Saat saya menjalankan WebAPI secara lokal, atau menerapkannya ke server jarak jauh, front end Angular 4 saya memberi saya:

Untuk panggilan ke pengontrol WebAPI - 401 (Tidak Sah) (bahkan pada pengontrol yang tidak memiliki [Authorize()] yang disetel.

Saat saya mencoba menggunakan aplikasi Angular lokal saya untuk mengakses WebAPI jarak jauh:

Tidak ada header 'Access-Control-Allow-Origin' pada sumber daya yang diminta. Oleh karena itu, asal 'http://localhost:62482' tidak diizinkan untuk diakses. Responsnya memiliki kode status HTTP 401.

Saya telah mencoba mengatur ulang urutan penambahan layanan di startup.

Saya telah menambahkan header respons secara manual di IIS8.5 (header tersebut ditimpa setiap kali saya menerapkan kode baru).

Saya telah menghapus semua barang CORS sepenuhnya dari aplikasi WebAPI.

Saya BERSUMPAH ini semua berhasil pada satu waktu. Tidak yakin apa yang berubah.

Saya semua berjalan dengan baik ketika saya menerapkan aplikasi WebAPI Core 2 dan aplikasi web Angular ke server jarak jauh karena asal-usulnya sama, tetapi hal itu membuat proses debug lokal menjadi tidak mungkin.

*** Kode REPO sudut per permintaan:

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());
    }
}


person user3637002    schedule 27.08.2018    source sumber
comment
Apakah api inti .net Anda selalu dilayani pada port yang sama yaitu..62482 juga dapatkah Anda mencoba menambahkan ini di fungsi konfigurasi Anda app.UseCors(builder => builder.WithOrigins("http://localhost") .AllowAnyHeader() ); dan memposting pengaturan sudut Anda juga ... @ user3637002   -  person Vaibhav Kumar Goyal    schedule 27.08.2018
comment
Harap tunjukkan juga kode Angular 2 yang membuat panggilan API (termasuk header/penyiapan CORS).   -  person Peter B    schedule 27.08.2018
comment
Ubah, WithOrigins("*") menjadi AllowAnyOrigin. Dan coba tambahkan ke pengontrol Anda secara manual untuk mengujinya dengan atribut [EnableCors("AllowAll")]   -  person penleychan    schedule 27.08.2018
comment
››Ubah, WithOrigins(*) menjadi AllowAnyOrigin. Dan coba tambahkan ke pengontrol Anda secara manual untuk mengujinya dengan atribut [EnableCors(AllowAll)]›› Sudah mencoba semua itu... tidak ada dadu.   -  person user3637002    schedule 27.08.2018


Jawaban (1)


Ini berfungsi untuk saya: Di Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseAuthentication();

        //app.UseHttpsRedirection();
        app.UseCors(
            options => options.AllowAnyOrigin().AllowAnyHeader()
                                               .AllowAnyMethod()
                                               .AllowCredentials()
        );
        app.UseMvc();
    }

dan itu saja, tidak ada sebutan lain untuk Cors.

Saya menggunakan JWT Bearer Token dan [Otorisasi] berfungsi sebagaimana mestinya.

Anda dapat mencoba dengan Tukang Pos terlebih dahulu, hanya untuk melihat apakah titik akhir Anda berfungsi, lalu pindah untuk membuat Angular http.get()

Ini adalah bagian sudutnya

const headers = new HttpHeaders().
                    set('Accept', 'application/json')

const url = 'http://localhost:5000/api/'  

return this.http.get(
   url + 'endpoint',
   { headers: headers }
);  
person wFitz    schedule 27.08.2018
comment
Apakah saya memerlukan autentikasi apa pun di aplikasi Angular saya? API menggunakan otentikasi windows dan tampaknya berfungsi dengan baik di server untuk mendeteksi identitas pengguna. Hanya ketika dijalankan secara lokal dan mencoba mengakses server jarak jauh saya mengalami masalah ini. - person user3637002; 27.08.2018
comment
FYI SWAGGER selalu berfungsi saat saya menggunakannya untuk menguji API. Ini sepertinya merupakan masalah aplikasi web sudut. - person user3637002; 27.08.2018