【发布时间】:2019-05-10 13:18:06
【问题描述】:
我有一个 ASP.NET MVC5 应用程序,并且我在其中一个控制器中编写了一个新的控制器操作。
我有一个场景,我想从不同的应用程序 (React) 调用这个新的控制器操作。
下面是我的新控制器动作。
public async Task<ActionResult> NewAction(int Id)
{
var project = await _repository.GetProjectFromIdAsync(Id);
if (project == null) return HttpNotFound();
return RedirectToAction("ExistingAction", new { id = project.Id });
}
我可以使用这个 url 成功调用操作 - https://myapplicationlink/ControllerName/NewAction?Id=30
但我想用休息类型的 url 来调用动作,比如
https://myapplicationlink/ControllerName/NewAction/30
但是当我这样做时,我得到了一个错误
参数字典包含方法“System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult] NewAction(Int32) 的不可空类型“System.Int32”的参数“Id”的空条目'
如何使动作接受休息类型的 URL?
【问题讨论】:
-
检查基于约定或属性的路由模板以确保它与所需的格式匹配
-
看起来不错。没有属性路由和使用url配置的常规路由:“{controller}/{action}/{id}”。而且我还可以使用 rest 类型的 url 调用同一控制器的其他操作。
-
路由模板占位符中的参数名称区分大小写。您有
Id(大写I),而模板为id(小写)。重命名参数以匹配路由模板Task<ActionResult> NewAction(int id) { ....
标签: c# asp.net .net asp.net-mvc asp.net-mvc-routing