(おそらく一意の)IDを使用するというあなたの言及から、別のアクションメソッドが必要になる場合があります。しかし、単一のインテントの説明から、単一のコントローラーメソッドがおそらく進むべき道です-そして、文字列を手動で解析する必要がないことに注意してください.MVCモデルバインダーがそれを行うことができます.
別々のメソッドがある場合は、異なる URL を持つ必要があります。それらはオーバーロードされた同じメソッド名である可能性がありますが、異なる ID を割り当てるために ActionName 属性で修飾する必要があります。([HttpPost] やカスタム属性など、他のセレクター属性を使用して区別できることに注意してください。)
パラメータを期待する MapRoute (Global.asax 内) を使用して、パラメータに基づいて URL で異なるコントローラ メソッドを条件付きで呼び出すこともできます。
同じ種類のアクティビティをすべて 1 か所で処理することの利点は、コードがより明確になり、保守しやすくなり、欠陥が発生しにくくなることです。そうでない場合は、それらを分割します。これは、私が話しているいつものことを繰り返さないでください/真実の単一点/責任の分離です。
原則として、MVC では、URL パス (クエリ文字列なし)、コントローラー メソッド、およびインテントがすべて同じ行に分かれていることがわかります。たとえば、次の 2 つの URL はその規則に従います。
http://example.com/person/id/403
http://example.com/person/search?FirstName=Joe&LastName=Smith
URL で意図を表現して、1 人の人物または可能な複数の一致を取得します。
2 つのパラメーターの 1 つとして、省略形 (一意のようには聞こえません) を渡す可能性があるとおっしゃいました。オプションの各パラメータが個別に一意である場合、一度に複数の質問を作成することはおそらく意味がありません。a、b、または a AND b がある場合、実際にカスタム コントローラー ロジックの主力製品に入る前に、どのメソッドにリクエストを渡すかを判断するのは複雑になります。
また、LINQ などのテクノロジを使用すると、プロシージャルにクエリを動的に構成して、結果にいずれかまたは両方の制約を持たせることが非常に簡単になります。
[HttpGet]
public ViewResult Search(string FirstName, string LastName) {
var people = AllPeopleInDatabase();
if (!string.IsNullOrEmpty(FirstName)) people=people.Where(p => p.FirstName==FirstName);
if (!string.IsNullOrEmpty(LastName)) people=people.Where(p => p.LastName==LastName);
return View(people);
}
一意の ID をその組み合わせに入れることは、別の基準が一致する場合にのみ指定されたレコードを取得する必要があるという、プログラムによるシナリオ (パスワード検証のかなりユニークなケースを除いて) をすぐに考えることができないという理由だけで、私には意味がありません。 . したがって、誰かが ID を尋ねたときに ID が存在しない場合、それはおそらくエラー ケースであり、誰かが結果を生成しない条件で検索した場合、それはおそらくエラー ケースではありません。それでも、次のことができます。
public ViewResult Search(string FirstName, string LastName, int? id) {
編集: また、モデル バインダーはクラスのプロパティを処理することに注意してください。これは、複数のパラメーターをバインドする一般的な方法です。
public ViewResult Search(MyCriteriaViewModel criteria) {
edit2: RESTful サービス (WebAPI が理想的に適している) には、CRUD URL の標準的なプラクティスがあることにも注意してください。以下はhttp://www.asp.net/web-api/overview/creating-web-apis/creating-a-web-api-that-supports-crud-operationsからのものです。
Action HTTP method Relative URI
Get a list of all products GET /api/products
Get a product by ID GET /api/products/id
Get a product by category GET /api/products?category=category
Create a new product POST /api/products
Update a product PUT /api/products/id
Delete a product DELETE /api/products/id
幸運を!