首页 > 解决方案 > ASP.NET Core MVC - Razor - asp-action 路由问题

问题描述

在创建表单并在剃刀中设置其路由时,我遇到了一个小问题。在我看来,我有以下几点:

<form asp-action="Create" asp-controller="Lead">

但是,它将数据发布到我的 API 端点 ( api/lead/create) 而不是我的标准控制器 ( lead/create)。

它生成以下 HTML:

<form action="/api/lead/create" method="post">

关于如何解决这个问题的任何建议?我的控制器路由是默认的:

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

如果我完全删除了我的 API 方法,那么它会选择正确的路线并且事情会按预期工作,但我似乎不能同时拥有这两者?

我对这个不知所措。。

编辑:

这是主要控制器定义:

// GET: Lead/Create
public ActionResult Create()
{
    var viewModel = new CreateOrUpdateLeadViewModel();

    return View(viewModel);
}

// POST: Lead/Create
[Route("lead/create")]
[HttpPost]
[ValidateAntiForgeryToken]

这是 API 控制器上 Lead 方法的定义:

[Route("api/lead/create", Name = "apileadcreate")]
[HttpPost]
public async Task<IActionResult> Create([FromBody] LeadDto leadDto)

标签: c#asp.netasp.net-mvcasp.net-corerazor

解决方案


正如你所说,asp-action="Create" asp-controller="Lead"会生成到action="/api/lead/create"。我认为你可以尝试使用

<form action="/lead/create" method="post">

这样你就可以确保它不会去/api/lead/create


推荐阅读