【发布时间】:2017-04-17 00:29:13
【问题描述】:
我正在尝试建立一个没有动作而只有一个参数的路由:
domain.com(不带任何参数,应该去一个控制器)
然而,
domain.com/somestring
domain.com/另一个字符串
domain.com/anythingreally
应该转到另一个控制器(并将字符串作为参数传递)。
我无法弄清楚语法,因为据我了解,ASP 正在使用参数来确定操作,但我希望任何和所有字符串都执行相同的操作。
这些是我的路线:
Application.UseMvc(Routes =>
{
Routes.MapRoute(name: "go", template: "{controller=Go}/{action=Go}/{id?}");
Routes.MapRoute(name: "redirect", template: "{controller=Redirect}/{id?}");
Routes.MapRoute(name: "default", template: "{controller=Short}/{action=Index}");
});
我想要达到的是:
domain.com 转到 Short/Index
domain.com/go/somestring 去 go/go 并获取 somestring 作为参数
domain.com/somestring 转到重定向/索引并获取 somestring 作为参数
控制器很简单:
go 控制器定义为:
public class GoController : Controller
{
public IActionResult Go(string Id)
重定向控制器定义在:
public class RedirectController : Controller
{
public IActionResult Index(string Id)
短控制器为:
public class ShortController : Controller
{
public ActionResult Index(RegisterViewModel Data)
【问题讨论】:
-
你能发布你的控制器代码和你的路由代码吗?你如何定位你的控制器?
-
我只是将代码添加到帖子中以进行澄清
-
{controller} 是 Go、Default 或 Redirect 的位置,但前提是您的控制器名称是 GoController、RedirectController 等。我不相信
{controller=Go}/{action=Go}/{id?}有效。如果控制器是 Go,那么它将路由到动作。如果您不想使用某个操作,请将其删除。 id 应该是方法中参数的名称。因此,假设请求方法是 Get,GoController中的Public Function GetGo(byval id as string) as IActionResult将匹配。 -
路由
/{controller}/{id}将适用于您的方法,假设在 uri 中选择了 Go 并且您的控制器方法接受了您的请求方法。 -
{controller=Go}/{action=Go}/{id?} 工作正常,事实上它是唯一有效的。真正的问题是如何将域名后面的“任何内容”路由到单个控制器,除非它是“开始”或者域名后面没有任何内容。
标签: asp.net-mvc