【问题标题】:Redirecting a controller and action method to its URL将控制器和操作方法重定向到其 URL
【发布时间】:2021-11-21 04:55:12
【问题描述】:

我正在处理一个在ASP.NET MVC 5 完成的项目。

他们使用了框架标准的默认 URL 结构。例如,AGM 页面是这样构建的:

  • 控制器:主页
  • 行动方式:AGM

如果没有任何路由设置,要访问此页面,您需要转到以下 URL:

www.example.com/Home/AGM

这是他们发送给媒体的 URL。这个 URL 看起来很糟糕,我想实现一个更简洁的 URL 结构,如下所示:

www.example.com/agm

我在RouteConfig.cs文件中已经这样设置了:

routes.MapRoute(
    name: "AGM",
    url: "agm",
    defaults: new { controller = "Home", action = "AGM" }
);

我想要实现的是,如果用户输入www.example.com/Home/AGM,那么它需要显示像www.example.com/agm 这样的URL。相反,它显示为www.example.com/Home/AGM

我不知道如何实现这个?

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-3 asp.net-mvc-5


    【解决方案1】:

    配置路由并在url中定义action

    routes.MapRoute(
        name: "AGM",
        url: "{action}",
        defaults: new { controller = "Home", action = "AGM" }
    );
    

    然后在AGM方法中重定向到www.example.com/agm

    if (Request.Path.ToLower() == "/home/agm")
    {
        return Redirect("/agm");
    }
    

    【讨论】:

    • 这对我有用,但你只是忘了return View();的else部分
    • 当然,我只是写了一部分代码
    【解决方案2】:

    您只需在 Action 方法的顶部添加 [Route("AGM")][Route("Home/AGM")]

    [Route("AGM")]
    [Route("Home/AGM")]
    public IActionResult AGM()
    {
        return View();
    }
    

    【讨论】:

    • 这不起作用,当我输入www.example.com/Home/AGM 然后它转到www.example.com/Home/AGM 而不是www.example.com/agm
    猜你喜欢
    • 2013-06-20
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多