C# 操作路由:应用程序混淆了GET和POST方法

C# 操作路由:应用程序混淆了GET和POST方法,c#,post,asp.net-core-mvc,C#,Post,Asp.net Core Mvc,上下文: 使用GET方法构造的视图此时采用两个参数:id和date。在此视图中,有一个表单使用参数idPOST方法将信息发送回控制器 获取方法 [HttpGet] 公共异步任务详细信息admin(int?id,[ModelBinder(typeof(PModelBinder))]DateTime?日期) { {...} } 发布方法 [HttpPost,ActionName(“DetailsAdmin”)] [ValidateAntiForgeryToken] [路由(“hechosluida

上下文:

使用GET方法构造的视图此时采用两个参数:
id
date
。在此视图中,有一个表单使用参数
id
POST方法将信息发送回控制器

获取方法

[HttpGet]
公共异步任务详细信息admin(int?id,[ModelBinder(typeof(PModelBinder))]DateTime?日期)
{
{...}
}
发布方法

[HttpPost,ActionName(“DetailsAdmin”)]
[ValidateAntiForgeryToken]
[路由(“hechosluidadors/DetailsAdmin/{id}”)]
公共异步任务DetailsAdmin(int?id)
{
{...}
}
问题:

当视图中的表单将信息发送给控制器时,它将转到GET操作而不是POST操作

表格:



我尝试过使用自定义路由到POST-Action方法,但没有成功。如何更正此错误,使表单正确指向POST操作?

在两种操作方法中,所有参数都是可选的。因此,Mvc不能选择“最佳候选”方法来执行。 将第一个操作更改如下,并检查id不是0:

[HttpGet]
public async Task<IActionResult> DetailsAdmin(int id = 0, [ModelBinder(typeof(PModelBinder))]DateTime? date)
{
    if (id != 0)
    {

    }
    {...}
}
[HttpGet]
公共异步任务详细信息admin(int id=0,[ModelBinder(typeof(PModelBinder))]DateTime?date)
{
如果(id!=0)
{
}
{...}
}

在两种操作方法中,所有参数都是可选的。因此,Mvc不能选择“最佳候选”方法来执行。 将第一个操作更改如下,并检查id不是0:

[HttpGet]
public async Task<IActionResult> DetailsAdmin(int id = 0, [ModelBinder(typeof(PModelBinder))]DateTime? date)
{
    if (id != 0)
    {

    }
    {...}
}
[HttpGet]
公共异步任务详细信息admin(int id=0,[ModelBinder(typeof(PModelBinder))]DateTime?date)
{
如果(id!=0)
{
}
{...}
}
<form id="@(String.Format("{0}{1}","form",Model[i].HechosID))" 
asp-action="DetailsAdmin" method="post" asp-route-id="@Model[i].HechosID" ></form>
[HttpGet]
public async Task<IActionResult> DetailsAdmin(int id = 0, [ModelBinder(typeof(PModelBinder))]DateTime? date)
{
    if (id != 0)
    {

    }
    {...}
}