問題タブ [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.
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つでは、パラメーターである特殊文字は意味的にクエリ/フィルター(実際には検索サービスの検索用語)の一部ですが、別のサービスでは、実際にはクエリ/フィルターの一部ではないため、理想的にはその一部です。クエリ文字列ではなくパス。
私の質問は、どのオプションが最適ですか?これが私が知っているいくつかです:
HTTPGETとクエリ文字列を使用します。 特殊文字を使用する可能性のあるものはすべて、クエリ文字列とUrlEncodedに含める必要があります。 これは私が傾いているところですが、非常に長いクエリ文字列が心配です(IEには2083の制限があります)
パス内でHTTPGETおよびbase64エンコーディングを使用します。特殊文字を使用する可能性のあるパラメーターには、URLにModified Base64を 使用し、必要に応じてパスの一部として保持します。 私はこれを試しましたが、うまくいきましたが、ちょっと醜いです。非常に長いクエリ文字列についてはまだ懸念があります。
HTTPPOSTとメッセージ本文を使用します。 特殊文字を使用する可能性のあるものはすべて、リクエストの本文に含める必要があります。 まともな解決策のように見えますが、投稿はべき等ではないと理解されており、(私が思ったように)一般的に変更を目的としています(ここでは変更は発生していません)。
HTTPGETとメッセージ本文を使用します。 特殊文字を使用する可能性のあるものはすべて、リクエストの本文に含める必要があります。SO:リクエスト本文とRoyFieldingを使用したHTTPGETによると、これは悪い考えのようです。
リクエストの大きさに応じて、上記の#3と#1または#2のいずれかを組み合わせて使用します。
他の???
場合によっては、特殊文字を防ぐために変更できる場合もありますが(そうする場合もあります)、すべての場合にこれを実行できるわけではありません。
URIの長さに関して、RFC2616Sec3.2.1は次のように述べています。
HTTPプロトコルでは、URIの長さに事前の制限はありません。サーバーは、提供するすべてのリソースのURIを処理できる必要があり、そのようなURIを生成できるGETベースのフォームを提供する場合は、無制限の長さのURIを処理できる必要があります。URIがサーバーが処理できるよりも長い場合、サーバーは414(Request-URI Too Long)ステータスを返す必要があります(セクション10.4.15を参照)。
さらに、InternetExplorerの最大URL長は2,083文字です。
wcf - WCFRestヘルプページ
WCF RESTサービスのUriTemplateを、システム名http:// mysystem/ ..ではなくwww.mysite.com/...に更新するにはどうすればよいですか。
サービスヘルプページにアクセスすると、システム名が表示されますが、エンドユーザーには表示されたくありません。
見たい
これはweb.configで更新できるものだと思いますか?
.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 を設定できることはわかっていますが、可変数のディレクトリがあるため、それはオプションではありません。
wcf - UriTemplateTable が動詞を区別しない
WCF REST Contribを使用して .NET 3.5 で REST サービスを設計しようとしています。私のサービスはほぼ正常に動作していますが、奇妙なエラーに直面しています。
基本的に、私は2つの方法があります:
と
それでも、アクティベーション時にエラーメッセージが表示されます:
System.InvalidOperationException がユーザー コードによって処理されませんでした詳細については、UriTemplateTable のドキュメントを参照してください。ソース="System.ServiceModel.Web"
2番目のメソッドの名前を変更すると、正常に/books2?identity
機能します。
UriTemplateTable
が動詞を区別しない理由は何ですか?
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に設定したいと思います。
c# - 長くて複雑な URI
ネットワーク上のいくつかのリソースへのアクセスを提供する Web サービスがあります。このサービスには、リソースを検索してリソースのパスを返すメソッドがあります。別の方法として、このパスを使用して Web サービスにリクエストを送信します。
UNC パス全体 (HttpServerUtlility.UrlTokenEncode
メソッドでエンコード) を Web サービスに渡そうとします。結果の URI は非常に長く (331 文字)、「HTTP 400 Bad Request」が表示されます。
このような長い URI を処理するにはどうすればよいですか? URI が約 10 文字短い場合、要求は通過します。残念ながら、URI のサイズは可変であり、場合によってはそれ以上になることもあります。どのような変更を加える必要がありますか? 構成ファイルに長い URI を許可する設定はありますか?
wcf - WCFサービスのWebGetUriTemplate変数に「%26」を渡すことができませんか?
この宣言された操作を使用するWCFサービスがあります。
ただし、URLを呼び出そうとするとTest/You%26Me
、IISはエラーを返します。
私の目標は、URLエンコードを介してURIにアンパサンドを許可することです:%26
ワイルドカードは役に立ちませんでした。セキュリティ機能を無効にせずにこのエラーを防ぐ方法はありますか?
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
wcf - uritemplatesを「オーバーロード」することは可能ですか?
これは可能ですか?そうでない場合、誰かが代替案を提案できますか?
.net - webHttpBindingを使用したサービスからHelloWorldの代わりにGibberishを取得する
これは、「HelloWorld」文字列を返すことになっている簡単な例です。ただし、ブラウザには。のようなものが表示されますSGVsbG8gV29ybGQ=
。oldskulスタイルのサービスからプレーンテキストを返す正しい方法はどれですか?
それを知ってください:
文字列を返すことができません。3つのUnicode文字が自動的に先頭に追加され、従来のHTTPクライアントは相互運用できなくなります。
を返すこともでき
p>Message
ますが、それでもdata
変数を抽出するために機能を解析し続ける必要があります。同じメソッドシグニチャでのミキシングMessage
とint
タイプは、AFAIKでは許可されていません。
更新:それはぎこちないものではありませんが、正しくエンコードされた応答です。しかし、そのフォーマットは私が期待するものではありません。私は(以下の紳士が示唆するように)トランスポート層のメッセージング形式の究極の制御がMessage
クラスで得られることを理解しました。UriTemplate
ただし、これを使用すると、リクエスト(属性)を解析する可能性がなくなります。Message
したがって、とを統合する方法を知っておくと便利UriRequest
です。
PS「クリーンな」統合が不可能な場合-最もエレガントな回避策は何ですか?ワイヤーカーテンの後ろで実行され、実装で借用して使用できるコードはありますか?