【问题标题】:.net core mvc routing and controllers.net core mvc 路由和控制器
【发布时间】:2016-10-20 16:05:08
【问题描述】:

所以我是 .net 的新手。我现在正在学习.net core。我想弄清楚路由。我似乎无法让路由查看除 Home 和 Shared 之外的任何文件夹。我浏览了整个互联网并尝试了很多东西。似乎有什么我错过了。这是我得到的

 app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "test", 
                    template: "Register/test",
                    defaults: new { controller = "Register", action = "test"}
                    );

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


            });

我有一个带有 test.cshtml 文件的 Register 文件夹,只是为了尝试弄清楚这个路由。这是在我的 HomeController.cs 文件中

        public IActionResult test()
        {
            return View();
        }

在我的 _Layout 页面上我有这个链接

  <li><a asp-area="" asp-controller="Register" asp-action="test">Test</a></li>

当我把它放在主文件夹中时它工作得很好,但我想把它们分开。我知道我缺少一些东西。我已经浏览了包括 Stack Overflow 在内的各种在线文章,但我只是不明白我错过了什么。从我读到的内容来看,它假设类似于父文件夹/文件/然后和可能附加到该用户名的 ID 我尝试了其他格式的路由但没有运气,这只是我最近的尝试。我只是忍不住想我需要一些其他地方的代码。

【问题讨论】:

  • 对不起!您面临的真正问题是什么?您的预期行为是什么?
  • 现在向导航栏添加路由,因为这似乎是最简单的路由实例,但我想不适合我。基本上该链接应该转到注册文件夹中的测试页面。
  • 好吧,我确实让它工作了。不知道我所做的与我以前尝试过的不同。这并不能真正帮助我更好地理解它。但现在我让它工作了,也许我可以更好地剖析它。

标签: asp.net-core-mvc


【解决方案1】:

从您的问题看来,您的HomeController 中有以下代码。

public IActionResult test()
{
    return View();
}

这实际上属于您的RegisterController,因为您定义的路由模板是显式捕获,默认为“注册”控制器和“测试”操作。

名为“test.cshtml”的视图 - 由于默认约定而应如此命名 - 应位于您的 \Views\Register 文件夹中,与 \Views\Home 相邻。

这可能以某种方式起作用的原因有几个。首先,如果视图处于共享状态,则任何控制器都可以发现该视图。在不了解您尝试的请求的更多信息的情况下,很难确定路由是在第一条路由还是第二条路由上启动的,但如果该方法确实在 HomeController 上对 /home/test 的请求会起作用。

在我看来,您正在探索路由。太好了——我 100% 鼓励实验——只要你知道路由不一定是最容易学习的成果。这也是你不应该在 93.7% 的时间里接触的东西。例如,您使用RegisterControllertest 添加的控制器和操作不需要您定义的路由。

干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    相关资源
    最近更新 更多