AngularのHttpClientを使用する場合、URIにマトリックスパラメーターを使用してバックエンドにリクエストを行うにはどうすればよいですか?

キリスト教徒

マトリックスパラメータは90年代後半から存在しており、AngularはRouterModule それらを含むリクエストを処理する方法を知っています今日では、それらは事実上の標準であると言えますそれを考えると、AngularHttpClientがクエリパラメータをサポートするのと同じように(URLエンコードされた値で)それらをサポートするかどうか疑問に思っていましたHttpParams

これまでに見つけたのは、セミコロンをエンコードするタイミングについてのAngularJS(Angularではない)に関する2014年の問題のコメントだけです。

AngularのHTTPリクエスト(バックエンドへの)でマトリックスパラメータを使用して、たとえば文字列補間を使用してURLを「手動で」構築する唯一の方法ですが、クエリパラメータparamsはタイププロパティとしてリクエストに追加できますオブジェクトHttpParamsを介してHttpClientoptions

(言い換えると、AngularはURLエンコードを処理し、クエリパラメーターに疑問符、等号、アンパサンドを追加するようです-マトリックスパラメーターと同等のことはできますか?)

リクエストでマトリックスパラメーターを使用するクリーン/角度のある方法は何ですか(マトリックスパラメーター値のURLエンコードは、HttpClientその依存関係によって自動的に処理されますか、それとも開発者が明示的に行う必要がありますか)?

Reactgular

AngularのRouterModuleは、それらを含むリクエストを処理する方法を知っています

それは一種の、これは、複数のアクティブなルートをサポートする副作用があるので、それらに対処する方法を知っています。

ドキュメントのさらに下では、名前付きアウトレットについて説明しています

https://angular.io/guide/router#displaying-multiple-routes-in-named-outlets

基本的に、ルーターが1つ以上のルートを同時にアクティブ化することは可能です。これはURLでは不可能であるため、回避策は、URLパスにエンコードされた名前付きルートを挿入することです。

したがって、名前付きアウトレットは次のURLでアクティブ化される可能性があります。

http://.../crisis-center(popup:compose)

上記は、(:)有効なURL文字である文字を利用しています。これは、マトリックスパラメーターの作成に使用するのと同じ副作用であり、Angularチームは、異なる構文を使用して、マトリックスパラメーターとの衝突を意図的に回避したことがわかります。

AngularのHttpClientがHttpParamsでクエリパラメータをサポートするのと同じように(URLエンコードされた値で)それらをサポートするかどうか疑問に思っていましたか?

URL仕様には、クエリパラメータ1つしか存在できないと記載されています。

これは、行列パラメータには当てはまりません。

http://example.com/a;first=1/b;second=2/c;third=3

上記の例は、3つの異なる行列パラメーターのセットがあることを示しています。Webサーバーはこれらを次のように読み取ります。

a?first=1
b?second=2
c?third=3

URLパスとパラメータの間には緊密な結合があります。URLはHttpClientメソッドの単一のパラメーターであるため(APIを変更せずに)行列パラメーターを個別に渡すことはできません。

言い換えると、AngularはURLエンコードを処理し、クエリパラメーターに疑問符、等号、アンパサンドを追加するようです-マトリックスパラメーターと同等のことはできますか?

マトリックスパラメータをエンコードするようなAPIを作成できると確信していますが、それはURLレベルです。つまり、URL文字列は手続き型の値になり、APIの使い勝手が悪くなります。

行列パラメータを使用するための複数のパターンもあります。Java、C#、Pythonなど。すべてに異なる方法でそれらを行うフレームワークがあります。

リクエストでマトリックスパラメータを使用するクリーン/角度のある方法は何ですか

ありません。これは単なる別のURL文字列です。

(そして、マトリックスパラメータ値のURLエンコードは、HttpClientとその依存関係によって自動的に処理されますか、それとも開発者が明示的に行う必要がありますか)?

URLをエンコードすることはできずHttpClient、は最初のパラメーターとしてURLを受け取ります。これが何が起こるかの例です。

console.log(encodeURIComponent('https://www.example.com/'));

マトリックスパラメータは(クエリの前に)URLの一部であるため、有効なURLを作成するのはあなた次第です。

だから基本的に、あなたの質問に答えるために。呼び出す前にURLを生成するための独自のユーティリティが必要ですHttpClient.get()

function encodeMatrix(url: string, params: any) {
  // do work
  return url;
}

httpClient.get(encodeMatrix("https://www.example.com/", myParams)).subscribe()

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ