2008-12-05 63 views
10

我正在尋找一些關於使用C#在MVC中路由的信息。我目前非常瞭解MVC中的路由基礎知識,但我期待的是有點難以找到。MVC路由 - 參數名稱問題

實際上,我想找到的是一種定義採用單個參數的單個路徑的方法。

我在網上找到的常見的例子是所有基於圍繞例如

routes.MapRoute(
    "Default", 
    "{controller}.mvc/{action}/{id}" 
    new { controller = "Default", action="Index", id=""}); 

通過繪製這條路線,你可以映射到任何控制器的任何動作,但如果你想要任何東西傳遞到行動,方法參數必須被稱爲「id」。如果可能的話,我想找到解決辦法,這樣我就不必一直指定路線,只需在我的操作中使用不同的參數名稱即可。

有沒有人有任何想法,或找到解決辦法?

回答

0

您可以構建路由,只要你喜歡

routes.MapRoute(
    "Default", 
    "{controller}.mvc/{action}/{param1}/{param2}/{param3}" 
    new { controller = "Default", action="Index", param1="", param2="", param3=""}); 

此外,look at this post,它包含了所有類型的評論部分樣品

+1

有點兒跑題了......他想主要有{}控制器.mvc/{action}/{*}其中star是任何參數名稱。 – 2008-12-05 12:41:45

+0

是的,謝謝蒂莫西。這是正確的。也許我沒有把這個問題說得很好。 – Jimmeh 2008-12-05 12:49:58

+0

不知道你想要什麼,也許你可以嘗試使用*對於每個值在requestContext.RouteData.Values *和他們quering * value.Key *和* value.Value * – 2008-12-05 13:33:39

5

我不認爲你可以做你是什麼問。當MVC調用一個動作時,它會查找路由中的參數,請求參數和查詢字符串。它總是看起來與參數名稱匹配。

也許很好的舊查詢字符串將滿足您的需求。

~/mycontroller/myaction/?foobar=123 

將通過123這個動作:

public ActionResult MyAction(int? foobar) 
3

我知道這是幾個世紀以前,但希望它仍然可以幫助別人。我之前問過同樣的問題。我認爲這是你正在尋找的。從我的問題引用一個答案: 「{* pathInfo}位稱爲一個slug。它基本上是一個通配符,說」在這一點之後的所有東西都塞進一個名爲pathInfo的參數「,因此如果你有」{resource} .axd/{* pathInfo}「和一個像這樣的url:http://blah/foo.axd/foo/bar/baz/bing然後創建兩個參數,一個名爲resource,其中包含foo,另一個名爲pathInfo,其中包含foo/bar/baz/bing。」

7

如果你想有一個不同的參數名稱保持相同的路由變量,使用FromUri屬性,像這樣:

public ActionResult MyView([FromUri(Name = "id")] string parameterThatMapsToId) 
{ 
    // do stuff 
} 

在你的路由,所有你需要的是:

routes.MapRoute(
    "Default", 
    "{controller}.mvc/{action}/{id}" 
    new { controller = "Default", action="Index", id=""}); 
0

儘管您仍然無法使用FromUri屬性,但可以使用Route屬性,如

[Route("~/Policy/PriorAddressDelete/{sequence}")] 
public ActionResult PriorAddressDelete(int sequence) 
{ 
    Policy.RemoveScheduledPriorAddressItem(sequence); 
    return RedirectToAction("Information", new { id = Policy.Id }); 
} 

從技術上講,這增加了一個新的路線,但至少它不會混淆你的routeconfig。它把路線定義放在使用它的地方,我喜歡它(更少狩獵)。

請記住,爲了使用屬性的路由,這必須在你的routeconfig文件上述您定義的路由:

routes.MapMvcAttributeRoutes();