1

ASP.NET Web アプリの実装を作成しています。特定の URL に対して呼び出すときに、要求が GET か POST かに応じて異なるアクション メソッドを呼び出したいと考えています。

私は 2 つの異なるアプローチを試しました。まず、次のアクション メソッドを持つコントローラーから始めます。

<HttpGet>
Public Function Index() as ActionResult
...
End Function

<HttpPost>
Public Function Index() as ActionResult
...
End Function

...そして、.action を URL の "Index" に設定する Route を登録します。2 つの関数のシグネチャが同じであるため、これはコンパイルされません。

次に、Post ルーチンの名前を「Subscribe」に変更しようとしましたが、もちろん、ルーティング テーブルに 2 つの異なるルートを指定する必要があります (新しいアクション メソッド名を指定するため)。そうすれば、2 番目が 1 番目によってキャンセルされることがわかります。

私は今、元のアイデアに戻ることを考えていますが、それにダミーのパラメーターを提供し、それを UrlParameter.Optional として指定します。これをポスト ルーチンの引数として持つことで、新しいメソッド シグネチャが作成されます。これで問題ないと思います。

ちょっと汚いハックのにおいがするので、他の人はどうするのだろうと思っていましたか?

マーティン。

Ps。私は今、汚いハックを試しましたが、うまくいきます。それでも他の人の意見を聞くことに興味があります。

4

2 に答える 2

3

アクションの名前を変更して使用するActionNameAttribute

<HttpGet>
<ActionName("Index")>
Public Function IndexGet() as ActionResult
...
End Function

<HttpPost>
<ActionName("Index")>
Public Function IndexPost() as ActionResult
...
End Function

しかし、POSTメソッドはデータを取得しないため、POSTメソッドが何をするのかわかりません。POSTアクションは通常、処理する投稿データを取得するため、おそらくいくつかのパラメーターも必要になります。それらを追加すると、シグネチャが異なるため、2つのメソッドが同じ名前を共有する可能性があります(1つはパラメーターなし、もう1つはパラメーターあり)。

于 2011-05-17T08:36:46.463 に答える
1

私が最後に取った実際のアプローチを強調するための短いメモ-上記のロバートの答えも完全に有効ですが...

MapRoute 関数の制約引数で「.httpMethodConstraint」属性を使用することになり、関連するさまざまなメソッド タイプに個別のルートを提供しました。

ロバートの解決策は、一般的にはより良いアプローチだと思いますが、私の特定の問題については、個別のルートをマッピングするアプローチが私の技術リーダーの推奨する解決策です。

そこには多くはありません - 私が大規模なサイトで作業していた場合を除いて、大量のルートを作成することについて留保します。

助けて乾杯...

于 2011-05-20T16:05:37.483 に答える