我需要访问没有名字的参数。
例如:我有一个控制器测试,我想在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
);
答案 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动作。
(当您添加更具体的路线时,您会希望它在顶部附近,并且在默认情况下肯定)。