如何定义不需要在URL中执行操作的路由?

时间:2013-09-01 20:05:41

标签: asp.net-mvc asp.net-mvc-4

定义了一条路线:

routes.MapRoute(
                name: "SearchRoute",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Search", 
                action = "Index", id = UrlParameter.Optional }

索引方法:

public ActionResult Index(int? id, SearchViewModel model)
  1. 我浏览到http://xxx.xxx.xxx.xxx/Search,我的索引操作是 点击我的SearchController,很好。
  2. 我浏览到http://xxx.xxx.xxx.xxx/Search/1,我收到404错误。
  3. 我浏览http://xxx.xxx.xxx.xxx/Search/Index/1,好的。
  4. 我宁愿使用上面的2而不必输入/Index/1。怎么样?

2 个答案:

答案 0 :(得分:0)

路由优先,即:您定义的路线首先是重要的。请尝试以下方法:

routes.MapRoute(
                name: "SearchRoute",
                url: "Search/{id}",
                defaults: new { controller = "Search", 
                action = "Index", id = UrlParameter.Optional }

routes.MapRoute(
                name: "DefaultRoute",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", 
                action = "Index", id = UrlParameter.Optional }

答案 1 :(得分:0)

您可以像这样创建路线:

routes.MapRoute(
    name: "SearchRoute",
    url: "{controller}/{id}",
    defaults: new { controller = "Search", action = "Index", id = UrlParameter.Optional }
);

它只会定位Index动作,但听起来就像你想要的那样。