【问题标题】:asp.net routing syntax with no action无操作的 asp.net 路由语法
【发布时间】: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


【解决方案1】:

你的路线应该是这样的

    app.UseMvc(routes =>
    {
        routes.MapRoute(
         name: "redirect",
         template: "{id}",
         defaults: new { controller = "Redirect", action = "Index" });

        routes.MapRoute(
          name: "go",
          template: "go/{id}",
          defaults: new { controller = "Go", action = "Go" });

        routes.MapRoute(
            name: "default",
            template: "{controller=Short}/{action=Index}/{id?}");


    });

在模板中你必须设置你想要的URL 并记住顺序很重要。你也应该检查这个Routing in ASP.NET Core

【讨论】:

  • +1 表示订单很重要!!谢谢你。订购是我的问题。我认为这在编译后的代码中并不重要,但是,嘿,很容易修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 2015-08-14
  • 1970-01-01
  • 2012-05-24
相关资源
最近更新 更多