2013-05-08 62 views

回答

3

你需要做那麼URL在你的路線靜態的那部分:

routes.MapRoute(
       name: "BannerAds", 
       url: "Go/Web", 
       defaults: new { controller = "CommunicationsAlias", action = "BannerAds" } 
      ); 

,然後將上面一個你更普遍的一個路線:

routes.MapRoute(
       name: "BannerAds", 
       url: "Go/{Web}", 
       defaults: new { controller = "CommunicationsAlias", action = "BannerAds", web = UrlParameter.Optional } 
       ); 
+0

我很困惑 - 我把「Go/Web」直接放在「Go/{Web}」上面嗎?當我嘗試這種方式時,「http://www.domain.com/Go/Advertising」仍然指向BannerAds操作。 – user547794 2013-05-08 17:23:58

+0

按順序從上到下嘗試路由。如果找到匹配,則選擇匹配路線。所以,你希望你的更具體的路線在頂部。 「{Web}」路線比「Web」更普遍。 – 2013-05-08 20:00:34

0

你應該能夠只是這樣做:

routes.MapRoute(name: "BannerAds", 
       url: "Go/Web", 
       defaults: new { controller = "CommunicationsAlias", action = "BannerAds", web = UrlParameter.Optional }); 

並手動解析控制器中的查詢字符串,如下所示:

public ActionResult BannerAds() 
{ 
    string idStr = Request.QueryString.ToString().Trim('='); // strip of leading '=' 
    int id; 
    if (!int.TryParse(idStr, out id)) 
    { 
     return HttpNotFound(); 
    } 

    ... 
} 
+0

我確實試過並得到一個「路由URL不能以'/'或'〜'開頭,它不能包含'?'字符。」錯誤 – user547794 2013-05-08 17:39:24

+0

@ user547794 - 請參閱編輯 – 2013-05-08 18:07:57

+0

@ user547794查看我更新的答案以獲得更完整的解決方案 – 2013-05-08 19:52:43

0

這樣

routes.MapRoute(
       name: "BannerAds", 
       url: "Go/Web", 
       defaults: new { controller = "CommunicationsAlias", action = "BannerAds", web = UrlParameter.Optional } 
       ); 

,如果你真的只是想趕上

http://www.domain.com/Go/Web?x=111222

然後寫控制器來檢查查詢字符串

編輯

?=111222不是一個合適的查詢字符串 - 我真的不明白你爲什麼想趕上那 - 通常有鍵值對,像?key=111222?x=111222寫一樣,你可以檢查的x或值時key,如果它等於111222,然後做點什麼

+0

此配置沒有爲http://www.domain.com/Go/Web?=111222選取路線 – user547794 2013-05-08 17:41:24