Ich habe eine einfache Daten-Ressource, die eine flache JSON-Datei aus meinem eigenen Projekt abruft. Wenn ich versuche, die url
durch die eines Working-API-Endpunkt zu ersetzen, den ich in einer separaten Domäne ausgeführt habe, erhalte ich einen 401-Fehler (nicht autorisiert) in Chrome.So beantragen Sie Cross-Domain mit Aurelia mit http-Client
SETUP: Ich habe eine Visual Studio-Lösung mit zwei Projekten.
1) RateAppAPI (WebAPI Projekt w/AspNet.cors)
2) RateAppClient (ASPNET 5 Template w/Aurelia)
3) habe ich sowohl eine flache Datei und ein API Endpunkt dien up das gleiche json Dokument. Sie werden sehen, dass einer im Code kommentiert wird und der andere nicht kommentiert.
- Das API-Projekt ohne Probleme meine GetAll Weg dient, kann ich traf den Endpunkt Postbote mit und ich wieder ein großes Ergebnis Json. Ich habe CORS aktiviert und richtig eingerichtet, ich habe das als als ein Problem ausgeschlossen.
- Ich habe das Client-Projekt Aurelia im wwwroot läuft und ich bin mit aurelia-http-client, die ich den Code zur Verfügung stellt für, aber ich werde Ihnen sagen, dass das Beispiel, das ich Arbeiten mit keine Probleme, die Flat-Datei zur Verfügung stellen wird verwenden, Ich habe in einem Verzeichnis innerhalb das Client-Projekt.
- Solange ich die Get() - Anfrage auf die flache Datei in meinem eigenen Projekt (natürlich) habe ich keine Probleme beim Einziehen der Daten und arbeiten damit. Nur wenn ich die URL so umstelle, dass sie auf den Endpunkt verweist, der sich in einer anderen Domäne befindet, erhalte ich den Fehler 401 (Nicht autorisiert).
Hier ist mein Code (ein ES6 Aurelia Modul), die die Daten-Ressource ist:
import {inject} from "aurelia-framework";
import {HttpClient} from "aurelia-http-client";
let baseURL = "http://localhost/RateAppAPI/api/UtilZip/ByUtil/7";
//let baseURL = "../api/utilzip/utilzip.json";
@inject(HttpClient)
export class UtilZipData {
constructor(httpClient) {
this.http = httpClient;
this.http.configure(x => { x.withCredentials(); });
}
getAll() {
return this.http.get(baseURL)
.then(response => {
return response.content;
});
}
}
Am Ende des Tages muss ich herauszufinden, wie man nur die Windows-Authentifizierung zu verwenden, und in der Lage sein, eine Client-Anwendung von einer Domäne zu laufen, dass die Domain localhost:1234
und Zugriff auf eine andere Domain nennen wir können die API-Domäne localhost/RatAppAPI
der API-Aufruf CORS mit dem folgenden Verfahren aktiviert wird:
public static void Register(HttpConfiguration config)
{
var cors = new EnableCorsAttribute("http://localhost:1234/", "*", "*");
config.EnableCors(cors);
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
Offenbar Schlüsselproblem ist die API-Endpunkt Berechtigung: Mit diesem wird gesagt können Sie auch Folgendes tun müssen. Ich weiß nicht, Windows-Authentifizierung 'weiter zu sagen, aber es sollte nicht spezifisch für Aurelia oder seinen' http-Client 'sein. Ich hoffe, dieser Kommentar ist hilfreich für diejenigen, die ihn als irreführend empfunden haben. – qtuan
Ich gab nur ein vollständiges Bild von dem, was ich hier machte. Ich bin mir nicht sicher, wo das Problem liegt. Es scheint, als ob das funktionieren sollte, aber irgendwo (in der API) oder in der Client-Anwendung mache ich etwas falsch zwischen meinem http get und der Autorisierung durch die API, um auf diesen Endpunkt zuzugreifen. –
Eric, lass einfach den Schrägstrich in deinen erlaubten Ursprung fallen und alles sollte anfangen zu arbeiten ... – Shaun