RouteConfig设置为接受可选参数

时间:2014-06-20 15:20:35

标签: c# asp.net-mvc-4 asp.net-mvc-routing

我在设置RouteConfig文件以接受可选记录ID作为URL的一部分时遇到问题,如下例所示。

http://localhost/123 (used while debugging locally)

or even

http://www.foobar.com/123 

理想情况下,我希望将记录ID(如上例中的123)作为参数传递到Home控制器的Index视图。我曾经认为默认的routeconfig就足够了(使用ID作为可选元素),但显然应用程序显然试图将浏览器引导到一个名为'123'的视图,这个视图显然不存在。

我当前的RouteConfig.cs看起来像这样:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

对此的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

您的路由说:

{controller}/{action}/{id}

这是您的网站,然后是您的控制器,然后是您的操作,然后是ID。

你只需要网站ID:

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

然后会在

处击中控制器
public class DefaultController : Controller
{
    public ActionResult Index(int id)
    {
    }
}

答案 1 :(得分:1)

"{controller}/{action}/{id}"告诉MVC路由可能有一个控制器名称,或者它可能有一个控制器名称后跟一个动作名称,或者它可能有两个后跟一个ID。如果只是一个ID,路由就无法理解它应该是一个ID,而不是一个动作或一个控制器名称。

如果您从未计划过任何其他控制器或操作,这样的事情可能有效:

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

但这可能是一个坏主意。几乎每个站点都至少有一个关键字来表示ID代表的内容。例如,StackOverflow有" / questions / {id}"。