routeconconfig setup接受可选参数

本文关键字:参数 setup routeconconfig | 更新日期: 2023-09-27 18:09:47

我在设置routecconfig文件以接受可选的记录ID作为URL的一部分时遇到了问题,就像下面的例子一样。

http://localhost/123 (used while debugging locally)
or even
http://www.foobar.com/123 

理想情况下,我希望有记录ID(123如在上面的例子)作为参数传递到Home控制器的Index视图。我曾认为默认的路由配置就足够了(使用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 }
    );
}

routeconconfig setup接受可选参数

你的路由显示:

{controller}/{action}/{id}

那是你的站点然后是你的控制器,然后是你的动作,然后是id

你只需要site然后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)
    {
    }
}

"{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}"。