【问题标题】:Asp Net Mvc Routing without action on multiple Controllers无需对多个控制器执行操作的 Asp Net Mvc 路由
【发布时间】:2021-08-07 17:32:01
【问题描述】:

我的 Asp Net MVC 应用程序包含 4 个控制器: 主页 |培训 |饮食 |配置

 routes.MapRoute(
                name: "Default",
                url: "{action}/{id}",
                defaults: new { controller = "Home", action = "Authorize", id = UrlParameter.Optional }
            );

当我想做一个 `RedirectToAction("Configurator","Configuration") 时,它告诉我找不到路由。 Picture 我尝试添加不同类型的路由,但从未实现以下场景:
我只希望 URL 不包含控制器名称:
所以而不是:
之前:https://localhost/Home/Login
之后:https://localhost/Login
还有
之前:https://localhost/Diet/DailyData
之后:https://localhost/DailyData

我在每个控制器中都有很多方法,所以我不想为每个方法设置一个路由。 这可能吗?如何实现?

提前非常感谢您!

【问题讨论】:

  • 你用的是什么版本的mvc?
  • @Sergey 我使用 MVC 版本 5.2.7.0 :/

标签: asp.net-mvc routes controller


【解决方案1】:

在 IgnoreRoutes 之后添加到 RouteConfig

routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);
 
routes.MapMvcAttributeRoutes();

之后你可以使用路由属性并添加到每个控制器的顶部

    [Route("[action]")]
    public class HomeController : ControllerBase

     [Route("[action]")]
    public class TrainingController : ControllerBase

....


您只需要添加 4 个属性 - 每个控制器一个。

并将默认路由返回到默认路由

  routes.MapRoute(
        name: “Default”,
        url: “{controller}/{action}/{id}”,
        defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional

不要碰它总是一个好主意。像这样设置您的默认路线

[Route("[action]")]
    public class HomeController : ControllerBase
{
[Route("~/Authorize")]
[Route("~/Home/Index")]
public IActionResult Authorize()

【讨论】:

  • 小问题仍然存在:当我启动我的应用程序时,它导航到 localhost:12345 并给我 404 页,但是当我尝试 localhost:12345/Home/Indexlocalhost:12345/Authorize 时,它工作得很好!我把我的 MapRoute 改回 Default 就像在你的例子中一样 :/ 除了一切都像魅力一样!非常感谢你拯救了我的一天!
  • 将 [Route("")] 添加到 Authorize Methode 的顶部解决了我的问题,非常感谢您的帮助,现在一切正常 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多