ASP.NET Core 3.0 控制器路由不起作用

Posted

技术标签:

【中文标题】ASP.NET Core 3.0 控制器路由不起作用【英文标题】:ASP.NET Core 3.0 Controller Routing Not Working 【发布时间】:2019-08-23 05:12:17 【问题描述】:

免责声明:我是 ASP.NET Core / Razor / MVC 的新手,并且开始使用 3.0 预览版。

我想要做的是在我的页面上有一个“按钮”,它将一个新的空项目添加到列表中,以便用户可以输入一些值。从我读过的(相当多)看来,拥有一个指向控制器的超链接点是正确的方法。我无法让它真正工作。这是我的代码:

指向控制器/动作的链接:

<a class="btn btn-success" asp-controller="Customer" asp-action="AddProduct">New Product</a>

控制器:

    public class CustomerController : Controller

    public void AddProduct()
    

        var tmp = "";

    

    public string Index()
    
        return "This is my default action...";
    

    public string Welcome()
    
        return "This is the Welcome action method...";
    


Startup.cs 路由是默认的:

        app.UseRouting(routes =>
        
            routes.MapRazorPages();
        );

使用此设置,如果我单击开始按钮,我会看到 URL 更改为以下内容,但没有其他任何反应(例如,没有中断点):

https://localhost:44358/Customers/Create?action=AddProduct&controller=Customer

我尝试将路由添加到 UseRouting 代码中,如下所示:

            app.UseRouting(routes =>
        
            routes.MapRazorPages();
            routes.MapControllerRoute(
                name: "Customer",
                template: "controller=Customer/action=Welcome");
        );

但是当我这样做时,它似乎坏了,因为文本颜色发生了变化(从白色变为黑色),当我点击它时没有任何反应。

知道我哪里出错了吗?

我还有一个问题 - 你如何从控制器访问模型数据?

【问题讨论】:

我建议您先开始阅读初学者教程。我什至不知道您是否应该使用 razor pages 或 mvc,这只是构建应用程序的两种不同方式。 MapRoute() 应该第二次使用而不是 MapControllerRoute,因为@JohanHerstad 表示将页面与 mvc 路由混合可能会产生奇怪的结果。 有趣的是,我确实阅读了几篇教程,但我没有感觉到它是其中的一个。只用 Razer 如何与 c# 代码对话? 我从 2.2 迁移到 3 后也遇到了同样的问题。你找到解决办法了吗? 我没有 - 我认为这只是一个错误。 【参考方案1】:

在此处查看页面中间:https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-core-3-0-preview-4/

在 Startup.cs 中配置:

        app.UseRouting();
        app.UseEndpoints(routes =>
        
            routes.MapRazorPages();
            routes.MapFallbackToPage("/Home");
        );

【讨论】:

以上是关于ASP.NET Core 3.0 控制器路由不起作用的主要内容,如果未能解决你的问题,请参考以下文章

属性路由在 asp.net core 3.0 中无法正常工作

自动挡换手动挡:在 ASP.NET Core 3.0 Middleware 中手动执行 Controller Action

路由覆盖在 asp.net core 3.1 剃须刀页面中不起作用

从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用

ASP.NET Core 路由前缀

在 ASP.NET Core 中更改控制器路由