Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET核心:从GET重定向到POST_C#_Asp.net_Asp.net Core - Fatal编程技术网

C# ASP.NET核心:从GET重定向到POST

C# ASP.NET核心:从GET重定向到POST,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,我想把MarriageById称为GET,如下所示: var url = '/MarriageById?id=' + id; 但我也希望有一个单一的ActionResult婚姻婚姻婚姻在显示视图之前进行一些处理。第二个必须是POST,因为它还将从asp接收发送表单 我正在尝试查看下面我自己的实现,但它仍然被重定向为GET,并且找不到ActionResult: [HttpGet] public ActionResult MarriageById(int id) { var marriag

我想把MarriageById称为GET,如下所示:

var url = '/MarriageById?id=' + id;
但我也希望有一个单一的ActionResult婚姻婚姻婚姻在显示视图之前进行一些处理。第二个必须是POST,因为它还将从asp接收发送表单

我正在尝试查看下面我自己的实现,但它仍然被重定向为GET,并且找不到ActionResult:

[HttpGet]
public ActionResult MarriageById(int id)
{
    var marriage = _marriageRepository.GetById(id);
    return RedirectToAction(nameof(Marriage), marriage);
}

[HttpPost]
public ActionResult Marriage(Marriage marriage)
{
    var people = _personRepository.GetAll();

    ViewBag.men = Utils.GetPersonsSelectListByGender(people, isMale: true);
    ViewBag.women = Utils.GetPersonsSelectListByGender(people, isMale: false);

    return View(marriage);
}
使用RedirectToAction总是意味着GET,因此这对于只接受POST的婚姻操作方法是不起作用的

然而,自己调用另一个方法并没有什么错,它仍然是一个和其他方法一样的方法。因此,请尝试以下方法:

return Marriage(marriage);

另一方面,如果婚姻方法总是只用于显示数据,而不用于保存、存储或更改数据,那么使用POST并不是最佳选择。POST通常意味着一个带有副作用的调用—保存、存储、更改,甚至删除,一般来说,最好坚持这个惯例。

我认为不应该将GET和POST动词混用。它们只是语义上的不同。 如果您想为这两个方法执行类似的功能,那么您可能不想从GET调用POST,而是想提取一些其他“私有”方法甚至层的公共部分,具体取决于用例

希望它有意义

我是用重定向来行动,而不是返回婚姻;因为它会找到关于婚姻的观点,而不是婚姻。当然,如果将基础视图return修复为return视图'Marriage';则可以解决此问题;。但是我搜索了一下,人们推荐了重定向到Action,我想在那之后我把一些概念搞混了。感谢您提供的详细答案,将其标记为已解决,因为它提供了解决方案,而不仅仅是信息。