問題タブ [asp.net-web-api-routing]
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.
c# - Web API の id パラメータの後のアクションによるルーティング
Web API では、デフォルト ルートは次のとおりです。
/api/locations/123?days=5
しかし、このようなルートで/api/locations/123/events?days=5
ヒットできるようにしながら、ルートをこのように見せたいとしたらどうでしょうか。LocationsController
/api/locations/123?state=md
コントローラ:
ここには実際に 2 つの質問があります。
LocationsController
イベントを返すを持つことは理にかなっていますか、それとも完全に別のコントローラーが必要ですか?- このようなルートを許可するには、ルートをどのよう
WebApiConfig
に設定しますか?
c# - BeginRouteForm は API ルートでは機能しませんか?
比較的単純なコードで作成しようとしているフォームがあります。
ApiController である PersonsController があり、WebApiConfig に次のルートがあります。
しかし、BeginRouteForm 呼び出しはアクションを返しません。結果の HTML:
ご覧のとおり、アクションは空です。ルートが見つからないと文句を言っているわけではありません (見つからない場合はそうなるでしょう)。routeValues オブジェクトに空の ID を指定しようとしましたが、どちらも機能しません (ただし、ID はオプションであるため必須ではありません)。
ここで何が欠けていますか?MapHttpRoute 経由で追加されたルートで BeginRouteForm を使用できませんか? 動作は、Html.BeginRouteForm と Ajax.BeginRouteForm の両方で同じです (当然のことながら、これらは同じベースを持っています)。明らかに、この場合、アクションが「/api/persons」に戻ることを期待しています。
rest - 関連付けを使用した RESTful Web API。出来ますか?
私は Web API を使用して REST サービスを作成しました。Brian Mulloy によるこのWeb API 設計のセクションを読んだ後、Web API との関連付けを実装する方法を見つけようとしていました。
Web API 設計の抜粋:
協会
リソースは、ほとんどの場合、他のリソースとの関係を持っています。これらの関係を WebAPI で表現する簡単な方法は何ですか?
名詞でモデル化した API をもう一度見てみましょう。動詞は良くなく、dogs リソースと対話する API です。/dogs と dogs/1234 の 2 つのベース URL があったことを思い出してください。
リソースとコレクションを操作するために HTTP 動詞を使用しています。私たちの犬は飼い主のものです。特定の所有者に属するすべての犬を取得するか、その所有者の新しい犬を作成するには、GET または POST を実行します。
GET /owners/5678/dogs
POST /owners/5678/dogs現在、関係は複雑になる可能性があります。飼い主は獣医師と関係があり、犬と関係があり、食べ物と関係があります。これらをつなぎ合わせて 5 ~ 6 レベルの深さの URL を作成する人を目にすることは珍しくありません。1 つのレベルの主キーを取得したら、特定のオブジェクトを既に取得しているため、通常は上記のレベルを含める必要はありません。言い換えれば、URL が /resource/identifier/resource の上にあるものよりも深い場合はあまり必要ないはずです。
そこで、次のような関連付けのコントローラーメソッドを追加しようとしました。
また、ルート テンプレートを次のように変更しました。
残念ながら、イベント リソースの更新/投稿を行うと、HTTP 500 内部サーバー エラーが発生し、応答本文は次のようになります。
リクエストに一致する複数のアクションが見つかりました
System.Web.Http.HttpPostAttribute (およびその他の HTTP 動詞) の追加と組み合わせてルート テンプレートを変更しようとしましたが、役に立ちませんでした。
誰かがこれを試して、それを機能させましたか? どんな助けでも大歓迎です。http動詞の倍数を持つことが絶対に不可能な場合は、RESTサービスとの関連付けを放棄する必要があると思います.
編集:解決策
Radim Köhler の回答を使用して、これを機能させることができました。次のように、HttpGetAttribute を Guests メソッドに追加します。
そして、次のようなデフォルトの GET アクションに対応する追加ルートを追加しました。
routing - Web API ルーティング - 要求に一致するアクションがコントローラーで見つかりませんでした
わかりました Web API ルーティングの楽しみ。
私のWeb APIルート構成は以下です。ジオコーディングと情報ルートのパフォーマンスは良好です。そして、なぜ検索がスイートに従っていないのか、私は混乱しています。
のようなURLが欲しいですhttp://webapi/api/v1/search/fc/rv
。この URL は、以下のスタック トレースを生成し、結果として 404 が生成されます。 get メソッドを備えたコントローラーがあれば、それがデフォルトで使用されるという慣習があると思いました。これは、最初のジオコーディング ルートで起こることのようです。
/multiple を使用して 2 番目のジオコーディング ルートに似た別のルートを作成すると、ルート テンプレートapi/v{version}/{controller}/**for**/{featureClass}/{returnValues}
が機能し、すべてが満足のいくものになります。
コントローラーの署名は
私の推測では、非同期タスク部分がデフォルトの get バインディングで何らかの形でそれを破棄していますが、変更されたルートで動作するため意味がありません。
asp.net - Web API アクションでビューモデルを使用する
Dave Ward によるこの投稿 ( http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/ ) を読み、単純な Web API コントローラーをまとめようとしています。それはビューモデルを受け入れますが、何かが私にはクリックされません。
ビューモデルをいくつかの DateTime プロパティを持つオブジェクトにしたい:
ストック Web API プロジェクトで何も変更せずに、値コントローラーを次のように編集します。
ただし、このコントローラーを使用しようとすると、次のエラーが発生します。
Multiple actions were found that match the request:
System.Collections.Generic.IEnumerable
1[System.Single] FEPIWebService.Controllers.ValuesController System.Collections.Generic.IEnumerable 型の Get()1[System.Single] Get(FEPIWebService.Models.DateRange) on type FEPIWebService.Controllers.ValuesController
を叩くとこのメッセージが出ます
また
最初の get アクションと 2 番目の get アクションの間のあいまいさを解決するにはどうすればよいですか?
さらなる信用のために、私がこの行動をとった場合
モデルバインディングがDateRangeパラメータを構築するように、jQueryを使用してそのオブジェクトにStartプロパティとEndプロパティを投稿するにはどうすればよいですか?
ありがとう!
クリス
asp.net-web-api - JSON 文字列 (複数のパラメーター) を WebAPI サービスのメソッドに渡す際の例外
JSON データをスクリプト側から WebAPI サービス内のメソッドに渡そうとすると、次の例外が発生します。
重要な注意点:
.net 4.0 と VS2010 で WebAPI を使用している間は、このような問題は発生しませんでしたが、.net 4.5 と VS2012 で WebAPI を使用すると問題が発生しました。4.5フレームワークでこれを親切に診断してください。以下のリンクにサンプルを添付しました。私たちは WebAPI の概念に慣れていないため、正しいサンプルをレビューしてコメント付きで投稿していただければ、非常に役に立ちます。適切なコメントを含むイベント投稿コード スニペットは問題ありません。
サンプル リンク: http://www.fileconvoy.com/dfl.php?id=gb197faeca5017d489993001280c7f122f64fc06a7
前もって感謝します。
c# - Web API ルーティング アクション
目標は、次の 4 つのエンドポイントを許可することです。
ルーティング エントリ:
これらは、コントローラーでの私の 4 つの関数定義です。
しかし、最初の URI を使用して請求書を投稿すると、認識されるルートは添付ファイル ルートです。ID 変数の後に異なるセクションを持つエンドポイントを設定するにはどうすればよいですか?
asp.net-mvc-4 - ASP.NET の GetUrlHelper() から相対 URL を返す方法は?
ASP.NET MVC 4 Web サイトでは、Web API を使用して、許可されたアクション (DELETE など) のリンクを含む JSON 形式のリソースを返しています。これらのリンクを作成するには、HttpRequestMessage で GetUrlHelper() 拡張メソッドを使用しています...
私の懸念は、 Link() から返される文字列が完全修飾 URL ( を含むhttps://example.com/...
) であるということです。必要なのは相対 URL ( のみ) だけ/my/resource
です。現在、実稼働環境が https であるべきところに http を追加しているというサーバーの問題があり、これは機能しません。これは個別に修正できますが、相対 URL を指定するだけでよいのでしょうか? もしそうなら、UrlHelper.Link() で生成された URL のルート部分を切り取るよりも、相対 URL を取得する良い方法はありますか?
編集: Richardson と Ruby の価値あるRESTful Web Servicesを参照した後、ここでは相対 URL が完全に適切であると確信しています。