ASP.NET Core:从GET重定向到POST

时间:2017-02-14 12:15:40

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

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

var url = '/MarriageById?id=' + id;

但我也希望有一个ActionResult Marriage(Marriage marriage)在显示视图之前进行一些处理。第二个必须是POST,因为它还将从asp。

收到“发送表单”

我正在尝试this solution(请参阅下面我自己的实现),但它仍然被重定向为GET并且找不到ActionResult Marriage

[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);
}

2 个答案:

答案 0 :(得分:4)

使用RedirectToAction始终意味着GET,因此无法使用仅接受POST的Marriage操作方法。

然而,自己调用另一种方法没有任何问题,它仍然是一种与其他方法一样的方法。所以试试这个:

return Marriage(marriage);

并且旁注:如果Marriage方法始终只用于显示数据,从不来保存,存储或更改数据,那么使用POST不是最好的选择。 POST通常意味着带有副作用的调用(保存,存储,更改甚至删除),一般来说,最好坚持使用该约定。

答案 1 :(得分:1)

我认为你不应该将GET与POST动词混合使用。它们只是在语义上不同。 如果您要为这两种方法执行类似的功能,可能不是从GET调用POST,而是可能需要提取其他“私有”方法或甚至层(取决于用例)的公共部分。 / p>

希望它有意义