【问题标题】:ASP.NET Core MVC - Razor - asp-action route issueASP.NET Core MVC - Razor - asp-action 路由问题
【发布时间】:2021-05-04 15:04:01
【问题描述】:

在创建表单并在 Razor 中设置其路由时,我遇到了一个小问题。我的看法如下:

<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)

【问题讨论】:

  • 你能用 Create action pls 显示 LeadController 吗?
  • @Sergey 我已经更新了问题以包含每个问题的定义 - 这有帮助吗?

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


【解决方案1】:

也尝试为您的 MVC 控制器提供路由名称:


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

并将此语法用于表单:


<form asp-route="leadcreate" method="post">
    <!-- Input and Submit elements -->
</form>

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-10-27
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      相关资源
      最近更新 更多