c# - 使用 MVC Controller 重载

标签 c# asp.net-mvc asp.net-core routes

我有一个同名的操作,一个不需要参数,另一个需要一个 ID,当我尝试浏览我的 url 时,我得到以下异常。

An unhandled exception occurred while processing the request.

AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied:

Mailer.Controllers.MailBuilderController.MailBody (Mailer) Mailer.Controllers.MailBuilderController.MailBody (Mailer)

我的 MailBuilder Controller 。

//[HttpGet("mailbuilder/MailBody")]
public IActionResult MailBody()
{
   Body model = new Body();
   return View(model);
}

//[HttpGet("mailbuilder/MailBody/{id}")]
public IActionResult MailBody(int id)
{
   Body model = _mailBuilderService.GetBody(id);
   return View(model);
}

如果我删除上面的评论,我可以导航,但我无法重定向到以下方法中的操作。

public IActionResult SaveBody(Body model)
{
  _mailBuilderService.AddBody(model);
  return RedirectToAction("MailBody", model.Id);
}

最佳答案

如果它与以前版本的 MVC 有任何相似之处,那么您将需要取消注释那些路由属性 ([HttpGet("mailbuilder/MailBody/{id}")]),同时重命名您的帖子同名 Action 。或者,您可以在表单助手中设置操作(如果它仍然存在)。

此外,路由器还可以找到您需要将路由数据作为对象提供的正确方法 return RedirectToAction("MailBody", new { id = model.Id });

以下代码示例未经测试,但我认为它会走在正确的轨道上......

[HttpGet("mailbuilder/MailBody")]
public IActionResult MailBody()
{
   Body model = new Body();
   return View(model);
}

[HttpGet("mailbuilder/MailBody/{id}")]
public IActionResult MailBody(int id)
{
   Body model = _mailBuilderService.GetBody(id);
   return View(model);
}

[HttpPost("mailbuilder/MailBody")]
public IActionResult MailBody(Body model)
{
  _mailBuilderService.AddBody(model);
  return RedirectToAction("MailBody", new { id = model.Id });
}

关于c# - 使用 MVC Controller 重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44392119/

相关文章:

c# - 如何使用 StringBuilder 进行不区分大小写的替换

c# - 如果在实例化 DbContext 资源的 using 语句中数据库连接失败,我如何自动抛出 ApplicationException?

c# - 如何在 ASP.NET Core 中添加全局 `AuthorizeFilter` 或 `AuthorizeAttribute`?

javascript - SignalR 核心 - 尝试将 clientId 传递给 Hub,无法弄清楚如何接收

c# - 使用 C# 以千位逗号分隔符格式化数字

c# - AutoMapper 条件映射不适用于跳过空目标值

c# - 像 MVC4 Razor 模板

jquery - MVC 6 - 无法再将多个 JSON 参数传递给 Controller

asp.net-mvc - ASP.NET MVC 和混合模式身份验证

azure - Azure函数的local.appsettings.json中的IsEncrypted是什么意思?