Używam aplikacji Angular 4 z interfejsem API ASP, które testuję na locahost z różnymi portami. Moja WebApi wymaga uwierzytelniania systemu Windows (trzeba uzyskać nazwę użytkownika logowania). Wszystkie połączenia korzystające z GET działają, ale niestety nie mogę uruchomić testu POST. Mam konfiguracji WebAPI dla CORS:Asp.net Core CORS działa z GET, ale nie z POST
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddDbContext<CatalogContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddCors(options =>
{
options.AddPolicy("AllowAll", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
});
});
services.AddMvc();
}
i kątowe 4 klient próbuje odpowiedzieć plikowi
fileChange(event) {
let fileList: FileList = event.target.files;
if (fileList.length > 0) {
let file: File = fileList[0];
let formData: FormData = new FormData();
formData.append('uploadFile', file, file.name);
let headers = new Headers();
/** No need to include Content-Type in Angular 4 */
headers.append('Content-Type', 'multipart/form-data');
headers.append('Accept', 'application/json');
let options = new RequestOptions({ headers: headers, withCredentials: true });
this.http.post("http://localhost:495/api//upload",formData, options)
.map(res => res.json())
.catch(error => Observable.throw(error))
.subscribe(
data => console.log('success'),
error => console.log(error)
)
}
Mój błąd:
XMLHttpRequest nie może załadować http://localhost:495/api//upload. Na żądanym zasobie nie ma nagłówka "Access-Control-Allow-Origin". Pochodzenie "http://localhost:4200" jest zatem niedozwolone. Odpowiedź miała kod stanu HTTP 500
i nagłówki Odpowiedź
Content-Length: 0 Data: Sun, 13 sierpnia 2017 13:13:09 GMT Persistent-Auth: true Serwer: Kestrel X parowe-by: ASP.NET X-SourceFiles: = UTF-8 B QzpcU291cmNlIENvZGVcUGFydG5lcnNoaXBDYXRhbG9nXFBhcnRuZXJzaGlwQ2F0YWxvZ1xQYXJ0bmVyc2hpcENhdGFsb2cuV2ViQXBpXGFwaVx1cGxvYWQ = =
Każda pomoc będzie mile widziane??!
Sprawdź http://enable-cors.org. wygląda na to, że sposób dodawania corsa nie działa. Sprawdź kartę sieci chrome dla żądania http. Kliknij na żądanie indywidualnie, aby zobaczyć szczegóły dotyczące żądania i odpowiedzi. Zamiast dzwonić za pośrednictwem aplikacji, sprawdź za pomocą rozszerzeń fiddler lub chrome, takich jak listonosz lub zaawansowany wypoczynek. Możesz również spróbować osobno włączyć cors dla poszczególnych klas, metod lub w web.config. – Amit
Proszę opublikuj swój stos wyjątków/wiadomość. Kiedy wystąpi wyjątek w środowisku ASP.NET Core, oprogramowanie pośrednie wyjątków ** wyczyści nagłówki **, więc nagłówki CORS zostaną utracone. Zobacz, co powoduje wyjątek i rozwiąż wyjątek, to powinno działać, kod Http 500 jest zwracany, gdy wystąpi wyjątek. – Tseng
Czy możesz potwierdzić, że 'UserCors' jest przed wywołaniem' UseMvc' w metodzie 'Configure'? – regnauld