2013-05-08 84 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