Asp.net MVC 5使控制器动作来接受休息类型参数

时间:2018-12-09 12:04:34

标签: c# asp.net .net asp.net-mvc asp.net-mvc-routing

我有一个ASP.NET MVC5应用程序,并且在其中一个控制器中编写了一个新的控制器动作。

我有一种情况,我想从另一个应用程序(响应)中调用这个新的控制器动作。

下面是我的新控制器动作。

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

我可以使用此网址成功调用操作-https://myapplicationlink/ControllerName/NewAction?Id=30

但是我想用REST类型的url来调用动作 https://myapplicationlink/ControllerName/NewAction/30

但是当我这样做时,我得到一个错误

  

参数字典包含用于方法'System.Threading.Tasks.Task`1 [System.Web.Mvc.ActionResult] NewAction(Int32)的非空类型'System.Int32'的参数'Id'的空条目'

我该如何采取行动以接受休息类型URL?

2 个答案:

答案 0 :(得分:1)

路由模板占位符中的参数名称区分大小写。

您有Id (大写字母I),而模板为id (小写字母)

这与{controller}/{action}/{id}路由模板不匹配

重命名参数以匹配路由模板Task<ActionResult> NewAction(int id) { ....

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

答案 1 :(得分:0)

首先,检查是否已配置路由loss.backward()

然后将{controller}/{action}/{id}参数名称重命名为Id