問題タブ [uritemplate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
11 に答える
29809 参照

http - やや複雑なパラメータが必要な場合にHTTPリクエストを設計するための最良の方法は何ですか?

私は自分が書いているいくつかのWebサービスを持っており、可能な限りRESTfulになろうとしています。IIS / ASP.NET/SharePoint内で実行されているHTTPHandlerを使用してこれらのWebサービスをホストしています。

私のサービスのほとんどはHTTPGETを期待しています。私はこれらのうちの2つを持っており、それらは単にいくつかのデータ(つまり、クエリ)を返し、べきになりますが、パラメーターは多少複雑になる可能性があります。どちらも、少なくともURLのPATH部分で許可されていない文字をサービスのパラメーターに含めることができます。

IIS、ASP.NET、およびSharePointを使用すると、URLパス内の次の文字は、Urlエンコードされていても、HttpHandlerに到達しないことがわかりました(要求が爆発し、これを簡単に制御できません) :

  • %(%25)
  • &(%26)
  • *(%2a、ただしUrlエンコードしませんでした)
  • +(%2b)
  • :(%3a)
  • <(%3c)
  • (%3e)

次の文字が私のHttpHandlerに到達しましたが、Urlエンコードされていても、UriTemplateはそれらを適切に処理できませんでした。

  • (%23)

  • 。(%2eですが、Urlエンコードしませんでした。UriTemplateは「。」を削除しました。isが/の前の最後の文字である場合)
  • ?(%3f)
  • /(%2f-UrlEncodedであっても、明らかな理由でUriTemplateが失敗します)
  • \(%5c)

ですから、私はある程度徹底しましたが、クエリ文字列でこれらのurlエンコードされた文字をテストする必要があります。これはほとんどの部分で機能するようです。

私のサービスの1つでは、パラメーターである特殊文字は意味的にクエリ/フィルター(実際には検索サービスの検索用語)の一部ですが、別のサービスでは、実際にはクエリ/フィルターの一部ではないため、理想的にはその一部です。クエリ文字列ではなくパス。

私の質問は、どのオプションが最適ですか?これが私が知っているいくつかです:

  1. HTTPGETとクエリ文字列を使用します。 特殊文字を使用する可能性のあるものはすべて、クエリ文字列とUrlEncodedに含める必要があります。 これは私が傾いているところですが、非常に長いクエリ文字列が心配です(IEには2083の制限があります)

  2. パス内でHTTPGETおよびbase64エンコーディングを使用します。特殊文字を使用する可能性のあるパラメーターには、URLにModified Base64を 使用し、必要に応じてパスの一部として保持します。 私はこれを試しましたが、うまくいきましたが、ちょっと醜いです。非常に長いクエリ文字列についてはまだ懸念があります。

  3. HTTPPOSTとメッセージ本文を使用します。 特殊文字を使用する可能性のあるものはすべて、リクエストの本文に含める必要があります。 まともな解決策のように見えますが、投稿はべき等ではないと理解されており、(私が思ったように)一般的に変更を目的としています(ここでは変更は発生していません)。

  4. HTTPGETとメッセージ本文を使用します。 特殊文字を使用する可能性のあるものはすべて、リクエストの本文に含める必要があります。SO:リクエスト本文RoyFieldingを使用したHTTPGETによると、これは悪い考えのようです。

  5. リクエストの大きさに応じて、上記の#3と#1または#2のいずれかを組み合わせて使用​​します。

  6. 他の???

場合によっては、特殊文字を防ぐために変更できる場合もありますが(そうする場合もあります)、すべての場合にこれを実行できるわけではありません。


URIの長さに関して、RFC2616Sec3.2.1は次のように述べています。

HTTPプロトコルでは、URIの長さに事前の制限はありません。サーバーは、提供するすべてのリソースのURIを処理できる必要があり、そのようなURIを生成できるGETベースのフォームを提供する場合は、無制限の長さのURIを処理できる必要があります。URIがサーバーが処理できるよりも長い場合、サーバーは414(Request-URI Too Long)ステータスを返す必要があります(セクション10.4.15を参照)。

さらに、InternetExplorerの最大URL長は2,083文字です。

関連:RESTで複雑なクエリを渡す方法は?

0 投票する
2 に答える
989 参照

wcf - WCFRestヘルプページ

WCF RESTサービスのUriTemplateを、システム名http:// mysystem/ ..ではなくwww.mysite.com/...に更新するにはどうすればよいですか。

サービスヘルプページにアクセスすると、システム名が表示されますが、エンドユーザーには表示されたくありません。

http://myServerName.local/WCF/Svc.svc/blah/function

見たい

http://www.mysite.com/WCF/Svc.svc/blah/function

これはweb.configで更新できるものだと思いますか?

0 投票する
1 に答える
2728 参照

.net - WCF UriTemplate は、スラッシュ (/) を含む単一の文字列パラメーターと一致しません。

これがシナリオです。1 つの文字列パラメーターを受け取り、その文字列にスラッシュが含まれる WCF サービス呼び出しがあります (例: "123/456.xml")。http://www.exampleではなくhttp://www.example.com/File.svc/123/456.xmlでメソッドにアクセスできるように、この「/{file}」のような UriTemplate をセットアップしたい.com/File.svc/GetFile?file=123/456.xml .

これは UriTemplate で可能ですか?

  • 「/{directory}/{file}」のような UriTemplate を設定できることはわかっていますが、可変数のディレクトリがあるため、それはオプションではありません。
0 投票する
1 に答える
1327 参照

wcf - UriTemplateTable が動詞を区別しない

WCF REST Contribを使用して .NET 3.5 で REST サービスを設計しようとしています。私のサービスはほぼ正常に動作していますが、奇妙なエラーに直面しています。

基本的に、私は2つの方法があります:

それでも、アクティベーション時にエラーメッセージが表示されます:

System.InvalidOperationException がユーザー コードによって処理されませんでした詳細については、UriTemplateTable のドキュメントを参照してください。ソース="System.ServiceModel.Web"

2番目のメソッドの名前を変更すると、正常に/books2?identity機能します。

UriTemplateTableが動詞を区別しない理由は何ですか?

0 投票する
5 に答える
46752 参照

wcf - WCFのURITemplateのオプションのクエリ文字列パラメータ?

WCF4.0でいくつかのRESTfulサービスを開発しています。私は以下のような方法を持っています:

したがって、ブラウザをhttp:// localhost:8000 / Service / Test?format = XML&records = 10に移動すると、すべてが実行されたとおりに機能します。

ただし、 http:// localhost:8000 / Service / Test?format = XMLに移動して、URLの「&records=10」の部分を省略できるようにしたいです。しかし今、URIが期待されるURIテンプレートと一致しないため、サービスエラーが発生します。

では、クエリ文字列パラメータの一部にデフォルトを実装するにはどうすればよいですか?たとえば、その部分がクエリ文字列から除外されている場合、「レコード」をデフォルトで10に設定したいと思います。

0 投票する
1 に答える
114 参照

c# - 長くて複雑な URI

ネットワーク上のいくつかのリソースへのアクセスを提供する Web サービスがあります。このサービスには、リソースを検索してリソースのパスを返すメソッドがあります。別の方法として、このパスを使用して Web サービスにリクエストを送信します。

UNC パス全体 (HttpServerUtlility.UrlTokenEncodeメソッドでエンコード) を Web サービスに渡そうとします。結果の URI は非常に長く (331 文字)、「HTTP 400 Bad Request」が表示されます。

このような長い URI を処理するにはどうすればよいですか? URI が約 10 文字短い場合、要求は通過します。残念ながら、URI のサイズは可変であり、場合によってはそれ以上になることもあります。どのような変更を加える必要がありますか? 構成ファイルに長い URI を許可する設定はありますか?

0 投票する
1 に答える
1418 参照

wcf - WCFサービスのWebGetUriTemplate変数に「%26」を渡すことができませんか?

この宣言された操作を使用するWCFサービスがあります。

ただし、URLを呼び出そうとするとTest/You%26Me、IISはエラーを返します。

私の目標は、URLエンコードを介してURIにアンパサンドを許可することです:%26

ワイルドカードは役に立ちませんでした。セキュリティ機能を無効にせずにこのエラーを防ぐ方法はありますか?

0 投票する
3 に答える
3351 参照

spring - Spring RESTTemplate の使用時に URITemplate の展開を停止する

Spring RestTemplate を使用して Apache Solr インデックスを呼び出しています。リクエスト文字列を手動で作成し、意図的な {variable_name} テンプレート展開変数を提供しません。クエリの一部は、用語 {!lucene q.op=OR} です。残念ながら、これは RESTTemplate.getForObject 呼び出しの一部として URITemplate エンジンによって処理されます。

理想的には、この処理を停止したいと思います。URITemplate が処理しないように { } 文字をエスケープする方法はありますか? 文字のエンコードを試みましたが、RestTemplate はエンコードされていない文字列を想定しているため、2 回エンコードされ、バックエンドで 400: Bad Request が発生します。

サンプル URL:

http://localhost/solr/select?q= {!lucene q.op=OR}se_genbanklocus:* se_gb_create:* se_gb_update:* se_clone_name:* se_sample_tissue:*&facet=true&facet.limit=3&facet.mincount=1&facet.field= se_sample_tissue&facet.field=se_sample_tissue_name&facet.field=se_sample_tissue_code&facet.field=se_sample_tissue_class&facet.field=se_nuc_acid_type&facet.field=ssam_sample_georegion&start=0&rows=10

0 投票する
3 に答える
5404 参照

wcf - uritemplatesを「オーバーロード」することは可能ですか?

これは可能ですか?そうでない場合、誰かが代替案を提案できますか?

0 投票する
3 に答える
561 参照

.net - webHttpBindingを使用したサービスからHelloWorldの代わりにGibberishを取得する

これは、「HelloWorld」文字列を返すことになっている簡単な例です。ただし、ブラウザには。のようなものが表示されますSGVsbG8gV29ybGQ=。oldskulスタイルのサービスからプレーンテキストを返す正しい方法はどれですか?

それを知ってください:

  1. 文字列を返すことができません。3つのUnicode文字が自動的に先頭に追加され、従来のHTTPクライアントは相互運用できなくなります。

  2. を返すこともできMessageますが、それでもdata変数を抽出するために機能を解析し続ける必要があります。同じメソッドシグニチャでのミキシングMessageintタイプは、AFAIKでは許可されていません。

    p>

更新:それはぎこちないものではありませんが、正しくエンコードされた応答です。しかし、そのフォーマットは私が期待するものではありません。私は(以下の紳士が示唆するように)トランスポート層のメッセージング形式の究極の制御がMessageクラスで得られることを理解しました。UriTemplateただし、これを使用すると、リクエスト(属性)を解析する可能性がなくなります。Messageしたがって、とを統合する方法を知っておくと便利UriRequestです。

PS「クリーンな」統合が不可能な場合-最もエレガントな回避策は何ですか?ワイヤーカーテンの後ろで実行され、実装で借用して使用できるコードはありますか?