我有一個簡單的數據資源,它可以從我自己的項目中檢索一個平面json文件。當我嘗試將url
替換爲我在單獨的域上運行的工作API端點時,我在chrome中出現401(未授權)錯誤。如何使用http-client與Aurelia請求跨域域
SETUP:我有兩個項目的Visual Studio解決方案。
1)RateAppAPI(的WebAPI項目瓦特/ AspNet.cors)
2)RateAppClient(ASPNET 5模板瓦特/ Aurelia)
3)I兼得和API端點服平面文件創建相同的json文檔。您會在代碼中看到一個評論,而另一個未評論。
- 的API項目的服務沒有問題我GETALL條路,我可以打 端點使用郵遞員,我回來 的JSON大型結果。我已啓用CORS並正確設置,我已經排除 作爲問題。
- 我在wwwroot目錄 運行Aurelia大街客戶端項目中,我使用aurelia-http-client,我將提供代碼 ,但我會告訴你,比如我將提供工程與 使用平面文件沒有問題,我有一個 客戶項目中的目錄。
- 只要我將Get()請求指向我自己的項目中的平面文件(當然),我沒有任何問題拉入數據並使用它。只有當我切換網址指向位於不同域的端點時,我會收到401(未授權)錯誤。
這裏是我的代碼(ES6 Aurelia模塊)是數據來源:
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;
});
}
}
在一天結束的時候,我需要弄清楚如何只使用Windows驗證,並能從一個域運行客戶端應用程序,可以讓調用域localhost:1234
和訪問不同的域,讓調用API域localhost/RatAppAPI
的API將使用以下方法啓用CORS:
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 }
);
}
顯然,關鍵的問題是API端點授權。我不知道'windows-authentication'可以進一步說明,但它不應該特定於Aurelia或其「http-client」。希望這個評論有助於那些發現像我這樣誤導人的人。 – qtuan
我只是給了我在這裏做什麼的全貌。我不確定問題出在哪裏。看起來這應該可行,但在某處(在API中)或在客戶端應用程序中,我在http獲取和API授權訪問該端點之間做了一些錯誤。 –
埃裏克,只是在您允許的原點放下尾隨的正斜槓,一切都應該開始工作...... – Shaun