asp.net核心中URL中的控制器名称?

时间:2020-11-03 16:51:05

标签: asp.net-core razor-pages asp.net-core-3.1

使用asp-controller标记帮助器(https://docs.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms?view=aspnetcore-3.1#the-form-tag-helper)时,应该可以像这样指定要运行的控制器: <form asp-controller="Demo" asp-action="Register" method="post">

很明显,这里的控制器是Demo。似乎这是通过URL https://localhost:44311/?action=onPost&controller=TodoItem

从Web浏览器传输到后端的

但是在我的情况下这不起作用,运行的控制器不是URL中的那个,而是连接到表单所在页面的那个。我该如何调试,如何查看出了什么问题?解决方案是什么,是否要加载某些服务来启用此行为?

2 个答案:

答案 0 :(得分:1)

似乎这是使用URL从Web浏览器传输到后端的:https:// localhost:44311 /?action = onPost&controller = TodoItem

要解决上述问题,您可以尝试注册用于MVC控制器的服务,并为控制器操作添加端点,如下所示。

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
    services.AddRazorPages();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //...
    //other configuration code here
    //...

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();

        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

并确保您的剃刀项目包含从Microsoft.AspNetCore.Mvc.Controller继承的控制器类,如下所示。

public class DemoController : Controller
{
    //...

我的项目的文件夹结构

enter image description here

测试结果

enter image description here

答案 1 :(得分:0)

我知道了-标记助手var inpmarkup='<form:hidden path="bypassModel.selectedEntities" value='+'"'+ subEnt +'"'+'/>'; //create the inner html在使用Razor Pages时不执行任何操作,而是应使用asp-controller,如此处所述:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms?view=aspnetcore-3.1

要解决此问题,文档很有用,就像@Fei Han评论的那样,跟踪日志记录了路由中间件。因此,默认的asp-page如下所示:

appsettings.json