【问题标题】:MVC core routing not functioning as expectedMVC 核心路由未按预期运行
【发布时间】:2017-02-23 17:01:36
【问题描述】:

所以这是我第一次设置基于 netcore MVC 的应用程序。我过去在普通的旧 asp.net 上使用过 MVC 4。

所以我的路由有问题。我的应用程序是一个单页应用程序 (spa),可以从 home 控制器上的 index 操作访问。我可以很好地访问这个控制器方法,并且我的默认设置是这样导航到的:/

我还有第二个用于身份验证的控制器,称为AccountController。这个控制器的方法接受并返回 JSON,而不是视图。我还可以从我的应用程序访问此控制器上的方法。

我遇到的问题在于我的下一个控制器,这是我的 API 的开始。 因此,我将它放在了我的控制器文件夹中名为api 的文件夹中。但是,无论我尝试什么,我似乎都无法访问控制器上的方法。我也试过把它移出 api 文件夹,只放在控制器文件夹的路径中。

路由定义

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

我已经尝试添加和删除 api 定义,删除 api 部分,并为操作添加模板,都没有效果。

麻烦的控制器

public class CoreController : Controller
{
    [HttpGet]
    public JsonResult Get()
    {
        return Json("Dev");
    }
}

我已尝试将[Route(~routing here~)] 注释添加到此控制器及其方法,但也没有成功。

文件夹结构

我还应该提到,我已经尝试了很多 URL 来访问这个控制器:

  • /api/Core/
  • /核心/
  • /api/Core/Get

一天中的大部分时间我都在绞尽脑汁试图解决这个问题,但我知道我遗漏了一些明显的东西,我终生无法弄清楚它是什么。

编辑:

编辑 2

看来我的示例有效,我将添加一些东西来看看是什么破坏了它

【问题讨论】:

  • 将 api 控制器放在子文件夹中而不是直接放在 Controllers 文件夹中可能是由于控制器发现的约定而导致的问题,我建议尝试将其放在 Controllers 目录中以验证是否存在问题
  • @JoeAudette 班级位置无效。 api 按类型搜索类。 OP 已排除可能对识别问题很重要的信息。提供可用于重现问题的minimal reproducible example
  • @Nkosi 哪些信息更有用?我不能准确地发布整个申请?
  • @Nkosi 如果你不介意看一下,我已经向 github 添加了一个完整的示例

标签: c# routing routes asp.net-core single-page-application


【解决方案1】:

AFAIK,默认路由也需要使用 {action}。

代替“api”默认路由,您可以为此类控制器(RESTFul 控制器)使用以下配置:

[Route("api/[controller]")]
public class CoreController : Controller
{
    [HttpGet]
    public JsonResult Get()
    {
        return Json("Dev");
    }
}

我发现这篇 Routing is ASP.NET Core 过去的文章很有用。

【讨论】:

  • 我已经尝试使用上述路由注释但没有成功
  • @LexWebb 您是否尝试过完全相同的注释(从您的问题描述中不清楚)?我已将此控制器代码添加到我的测试项目中,并通过 GET /api/core 获得了预期结果
  • 是的,我开始觉得有些奇怪,因为从逻辑上讲,一切都应该正常工作,可能与我的水疗中心的设置方式有关,但有点难以分辨跨度>
【解决方案2】:

事实证明,我在一个完全不相关的地方犯了一个错误。在构建脚本到位后,我在开发的开始阶段中途重命名了我的项目。这导致在运行代码时在服务器上引用了错误的 dll,当然,这个版本具有我的所有路由,除了新的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    相关资源
    最近更新 更多