解决Get和Post的Action方法名无法一致
一、为什么会遇到这个问题?
公共语言运行时 (CLR) 需要重载方法拥有唯一的参数签名(相同的方法名称但不同的参数列表)。 但是,这里需要两个 Delete方法 -- 一个用于 GET,另一个用于 POST -- 这两个方法拥有相同的参数签名。 (例如:它们都需要接受单个整数作为参数。)
二、如何解决?
可通过两种方法解决此问题,
1.一种是为方法提供不同的名称。 这正是前面的示例中的基架机制进行的操作。 但是,这会造成一个小问题:ASP.NET 按名称将 URL 段映射到操作方法,如果重命名方法,则路由通常无法找到该方法。即向 DeleteConfirmed 方法添加 ActionName("Delete") 属性。 该属性对路由系统执行映射,以便包括 POST 请求的 /Delete/ 的 URL可找到 DeleteConfirmed 方法。
// GET: Movies/Delete/5
public async Task<IActionResult> Delete(int? id)
{
// POST: Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
2.另一种常用解决方法是手动更改 POST 方法的签名以包括额外(未使用)的参数,也就是添加无效的参数,避免与Get方法的参数完全一致。 这里为了 [HttpPost] Delete 方法可以执行同样的操作:
// POST: Movies/Delete/6
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id, bool notUsed)