【问题标题】:Why is routing calling HomeController Index when it should be mapped to different controller?为什么路由应该映射到不同的控制器时调用 HomeController Index?
【发布时间】:2020-04-09 01:19:56
【问题描述】:

我希望 url https://localhost:44354/Bills 调用 BillsController.cs 中的 Index 操作。相反,它从 HomeController.cs 调用 Index 操作。如果我使用https://localhost:44354/Bills/Bills,它确实会调用 BillsController 的 Index 操作。

按照我的理解,Bills 应该映射到控制器,并且应该默认为 Index,URL 中没有第二个参数。为了测试,我尝试了https://localhost:44354/Bills/Index,它给出了 404。有人可以解释这种行为吗?它的行为似乎不正确。

我的 Startup.cs 文件中的路由:

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

账单控制器:

public class BillsController : Controller
    {    
        public IActionResult Index()
        {
            return View();
        }
    }

我的文件夹结构:

【问题讨论】:

  • 您的默认路由映射到Home 控制器,而不是Bills 控制器
  • 当你调用它时:“localhost:44354/Bills”它试图在你的 HomeController 中找到一个名为“Bills()”的方法。

标签: c# asp.net-core asp.net-core-mvc asp.net-mvc-routing


【解决方案1】:

@NickOban,我尝试创建一个新的 MCV 项目并添加了一个账单控制器。然后我添加了 Bills 存储库并添加了一个 index.cshtml

路径对我有用。但是,您似乎在某些时候使用了名为“Bills”的前缀,这会导致您遇到的现象。

确保您的代码中没有任何前缀。 MVC 应用程序应自动修复所有前缀。另外尝试https://localhost:44354/Bills/Index.cshtml 而不是简单的Index ~,因为这样MVC 正在expexting Index 是一个文件夹。

【讨论】:

  • However, it seems that you might have implemented a prefix at some point with the name "Bills", which would cause the phenomenon you are experiencing. 同意。
  • @Cornelis 这似乎很有可能。我确实创建了另一个项目,它的工作方式与您预期的一样。奇怪的是,URL https://localhost:44354/Bills/Index.cshtml 给出了 404。不确定在哪里寻找前缀,我的 launchSettings.json 看起来很标准,只是基本 url 和端口。我还清除了项目中所有构建的文件并重新构建。不用找了。额外的想法将不胜感激。
  • 我想我找到了问题所在。我已经进入项目属性并将应用程序 URL 更改为localhost:44354/Bills。后来我把它改回来了,但设置一定是卡住了。我创建了一个新项目并导入了我的所有代码。现在一切都很好。感谢所有反馈!
猜你喜欢
  • 2020-01-28
  • 1970-01-01
  • 2016-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-05
相关资源
最近更新 更多