まだRESTfulなURLクエリ文字列変数を使用しています
-
05-07-2019 - |
質問
RESTful Asp.net MVCアプリケーションでクエリ文字列変数を使用する際に問題が発生します。それはRESTfulパターンに違反しますか?
問題は、Asp.net MVCが次のようなデフォルトルートを使用することです。
/controller/action/id
次のような別のコントローラーとアクションの組み合わせを通過する必要があります:
/controller/action/id/controllerX/actionX
ただし、最初の3つのパラメーターが省略され、最後の2つのパラメーターが最初のカップルとして扱われるため、アプリケーションのルートにいる場合、これは機能しません。
これの代わりに、この表記法を代わりに使用したいと思います:
/controller/action/id?Param=controllerX/actionX
ルートでも機能します
http://domain/?Param=controllerX/actionX
しかし、これはRESTfulですか?
ちょっとした説明
PartialViewsを備えた通常のビルトインよりも、ビューに対してよりモジュール化されたアプローチが必要です。多くのページに表示される部分ビューがある場合、特定の部分ビューを使用するビューを返す every single コントローラーアクションで、その特定の部分ビューのビデオデータを追加する必要があるためです。そして、それは物事を行う間違った方法だと思います。コントローラーは、メインビューの一部である可能性がある(または禁止されている かもしれない)部分ビューに依存するようになります。
部分的なビューの代わりにレンダリングアクションを使用することで解決します。独自のデータのみを準備するコントローラーのアクションを呼び出す独自の Html.RenderAction()
を使用します。これはうまく機能します。
最初の問題は、すべてのRenderActionアクションに伝播されるHTTPメソッドにありました。それで変更し、HTTPメソッドを好きなように制御できます。メインビューがポストバックされたかどうかに関係なく、一部のアクションは常にGETを使用する場合があります(したがって、POSTを使用します)。
問題は、これらのアクションが独自のFORM要素を持つ部分ビューを返す場合です。私のサブアクションは(どのビューを返すかわからないため)直接投稿できないため、実際には代わりにビューに投稿します。フォームを持つすべてのサブアクションは通常、メインビューからHTTPメソッドを伝播しているため、実際にはポストバックアクションの実行に入ります。
問題は、ポストバックされていた実際のフォームのみがPOSTアクションを実行することです。他の人は単にGETメソッドを使用する必要があります。ここで、2番目のコントローラー/アクションペアが登場します。すべてのサブアクションフォームが投稿します
mainViewController/action/?PostForm=controller/action
2番目のパラメーターは、POSTメソッドをどのサブアクションレンダリングに伝達するかを決定するのに役立ちます。その特定のフォームは、事後アクションで定義されているとおりに検証されます。
これにより、私の問題が具体的な例でもう少し説明されることを願っています。この問題は、私の昨日の質問に関連しています。
解決
このURLにより、セッションやCookie、またはクライアントの以前の閲覧履歴に依存せずに同じビューが返される場合、はい、あなたはRESTfulと呼んでいます。