2013-12-12 56 views
0

在我的MVC應用程序中,當用戶訪問www.MyDomain.com/Home時,由於以下路由條目導致此請求在HomeController類Index方法中處理在Global.asax中如何將請求路由到www.MyDomain.com到特定的控制器類別和方法

routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
      ); 

如果讓用戶去www.MyDomain.com/SomeParameters的說,我想在類myController的指數法處理此請求。參數的一個例子是www.MyDomain.com/John。爲此,我在Global.asax中創建了以下條目,但似乎沒有得到滿足。任何人都可以指出我在這裏做錯了嗎?

routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "MyController", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
      ); 

回答

2

路由處理約翰作爲控制器,而不是行動。因此,在您的示例約翰是控制器,因爲您不提供操作,它需要索引作爲默認操作。

如果你想www.MyDomain.com/John被路由到控制器myController的,動作指數以及包含約翰參數,一個解決辦法是添加以下路由(默認路由前):

routes.MapRoute(
    name: "MyController", 
    url: "{myparameter}", 
    defaults: new { Controller = "MyController", Action = "Index" }); 

而且控制器:

public ActionResult Index(string myparameter) 
{ 
    return View("whatever"); 
} 

這將導致www.MyDomain.com/John與myparameter = 「約翰」 的索引操作。

ps。在示例myparameter是強制性的。

+0

John實際上是一個參數而不是動作。 –

+0

對不起,我錯過了。我編輯了我的答案! – kloarubeek

+0

基於Queti的回答,我調整了url參數(實際上它不需要* MyController *) – kloarubeek

1

爲了擁有www.MyDomain.com/SomeParameters,您只需創建一個路由,其中​​Controller和Action方法是默認的,因爲它們不會在URL中提供。

確保路線定義僅包含someparameters,並且沒有任何其他內容。通過這種方式,您可以將/之後的任何內容作爲參數處理。

routes.MapRoute(
    name: "MyController", 
    url: "{someparameters}", 
    defaults: new { Controller = "MyController", Action = "Index" }); 

public ActionResult Index(string someparameters) 
{ 
    ... 

    return View(); 
} 
相關問題