首页 文章

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

提问于
浏览
1

我有一个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

但我想调用其他类型网址的动作,如 https://myapplicationlink/ControllerName/NewAction/30

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

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

如何使操作接受其他类型的URL?

2 回答

  • 0

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

    您有 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

    首先,检查您是否配置了路由 {controller}/{action}/{id} .

    然后将 Id 参数名称重命名为 id .

相关问题