私は自分のプロジェクト内から平らなjsonファイルを取得する簡単なデータリソースを持っています。 url
を別のドメインで動作している作業APIエンドポイントのものに置き換えると、Chromeで401(Unauthorized)エラーが発生します。http-clientを使用してAureliaでクロスドメインをリクエストする方法
セットアップ:私は2つのプロジェクトでVisual Studioソリューションを用意しています。 AspNet.cors/W
1)RateAppAPI(WebAPIのプロジェクト)
2)RateAppClient(Aurelia/W ASPNET 5テンプレート)
3)IはフラットファイルとAPIエンドポイントサービングの両方を有します同じjson文書を作成する。コードにコメントされているものとコメントされていないものが表示されます。
- APIプロジェクトは問題なく私のGETALLルートにサービスを提供している、私は 郵便配達を使用してエンドポイントを打つことができると私は戻って JSONの大きな結果を得ることができます。私はCORSを有効にして正しく設定しましたが、私はそれを問題として と判断しました。
- 私はwwwrootディレクトリ でアウレリアを実行しているクライアントのプロジェクトを持っていると私は私がのためのコード を提供しますaurelia-http-clientを使用していますが、私は例は、私が でフラット・ファイルを使用して何の問題も作品を提供しないことを教えてくれますよう私は 内のディレクトリにクライアントプロジェクトを持っています。
- 私自身のプロジェクト(もちろん)内のフラットファイルでGet()リクエストを指す限り、私はデータを引き込み、それに取り組むことに問題はありません。私が401(Unauthorized)エラーが発生した別のドメインにあるエンドポイントを指すようにURLを切り替えるときだけです。
ここでは、データリソースである私のコード(ES6 Aureliaモジュール)である:1日の終わりに
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認証を使用する方法を理解し、できるようにする必要があります
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 }
);
}
:1つのドメインからのクライアントアプリケーションを実行するために、そのドメイン
localhost:1234
を呼び出し、別のドメインにアクセスすることができます、APIがCORSには、以下の方法を使用して有効になりますAPIドメイン
localhost/RatAppAPI
を呼び出すことができます
どうやら、重要な問題は、APIエンドポイントの承認である私のAPIには、以下の使用して終了しました。私はそれ以上のことを言う 'windows認証 'は知らないが、Aureliaやその' http-client'に特有のものであってはならない。このコメントが私のように誤解を招くような人に役立つことを願っています。 – qtuan
私はここで何をやっていたのかを完全に把握しました。問題がどこにあるのか分かりません。これはうまくいくはずですが、どこか(API内)またはクライアントアプリケーション内で、http getとそのエンドポイントにアクセスするためのAPIによる承認との間に何か間違っています。 –
エリック、あなたの許可された起源の末尾にスラッシュをドロップするだけで、すべての作業を開始する必要があります... – Shaun