通过ASP.NET MVC应用程序中的URL传递参数

时间:2011-02-03 17:57:57

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

我需要访问没有名字的参数。 例如:我有一个控制器测试,我想在mysite.com/test/data中获得“数据”。不调用动作数据。 我知道如何通过Index action传递它。

public ActionResult Index(string id)

这样我只需要输入mysite.com/test/Index/data来获取“数据”,但我不想输入索引。

有谁知道怎么做?

编辑:

非常感谢@andyc!

AndyC我用你所说的并创造了一个测试。它工作= D

现在我可以输入mysite.com/something,如果某些内容不是控制器,则会重定向到我的个人资料页面。

这对我有用

routes.MapRoute(
      "Profile",
      "{id}",
      new { Controller = "Profile", action = "Index", id = UrlParameter.Optional }
);

routes.MapRoute(
      "Default", // Route name
      "{controller}/{action}/{id}", // URL with parameters
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

1 个答案:

答案 0 :(得分:1)

设置自定义路线

在你的global.asax文件中,put(在RegisterRoutes方法中):

routes.MapRoute(
    "MyShortRoute",
    "view/{id}",
    new { Controller = "test", action = "Index" }
);

第一个参数是名称,第二个参数是URL格式,最后一个参数是默认值(在这种情况下,如果你将id留空,它将默认为id 0。

请注意,我不使用test / {id},因为这也会匹配test / Edit,其中edit是一个你不希望作为参数传递的动作(我想不出另一种方法来避免这个,特别是如果你使用字符串而不是int来表示参数的话。)

请记住在global.asax文件中正确订购路线。在 不太具体的路由之前添加更具体的路由。当系统搜索要采用的路径时,它不会尝试找到最具体的匹配,而是从顶部开始,并使用它找到的第一个匹配。

因此,这很糟糕:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "test", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
    "Specific",
    "test/{id}",
    new { controller = "test", action = "Index", id = 0 } 
);

在这个例子中,如果你浏览test / somevalue,它将匹配FIRST条目,这不是你想要的,给你testcontroller和somevalue动作。

(当您添加更具体的路线时,您会希望它在顶部附近,并且在默认情况下肯定)。