從您提及的使用(推測是唯一的)ID中,您可能需要一個單獨的操作方法。但是從你的一個意圖描述中,單個控制器的方法可能是要走的路 - 並注意你仍然不會有手動解析字符串,MVC模式,粘合劑可以爲你做的。
如果你有不同的方法,他們必須有不同的URL。它們可能會重載相同的方法名稱,但是它們仍然必須用ActionName屬性進行修飾才能爲它們分配不同的標識。 (請注意,您可以使用其他選擇器屬性來區分,如[HttpPost]或自定義屬性。)
請注意,您還可以使用MapRoute根據其參數有條件地調用不同的控制器方法(在Global.asax )期望參數。
處理所有相同類型的活動在一個地方的好處是,該代碼變得更清晰,更易於維護,並減少易產生缺陷的。如果你發現情況並非如此,那就分手吧。這是通常的不要重複你自己/單一的真相點/我要說的責任分離的東西。
一般來說我在MVC發現URL路徑(不含查詢字符串),在控制器方法,並意圖都打破沿着相同的路線。例如,這兩個網址遵循這條規則:
http://example.com/person/id/403
http://example.com/person/search?FirstName=Joe&LastName=Smith
我們表示在URL意圖讓任何一個人或可能的多個匹配。
你說你可能傳遞的縮寫(這聽起來並不像它會是唯一的),爲兩個參數之一。如果每個可選參數都是獨立的,那麼一次只能爲多個參數提出問題可能沒有意義。如果你可能有a,b,或者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並且它不存在,那麼這可能是一個錯誤情況,如果某人按照不會產生結果的標準進行搜索,則可能不是錯誤情況。但儘管如此,你可以:
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
祝你好運!