我有一个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?
答案 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
。