在asp.net mvc应用程序中传递null而不是字符串的操作

时间:2017-07-14 16:33:39

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

我完全坚持这一点,我已经创建了一个操作,使用Identity Framework将新的Identity Role添加到我的数据库中。不幸的是,每当它被执行时,它返回它已经失败并且在我插入断点之后,我确定我传递null作为newRole的值而不是superadmin,如预期的那样。

以下是我正在使用的网址,与我正在使用的网址完全相同:

https://localhost:44344/account/addrole/superadmin

这是相应的行动:

[Authorize(Roles = RoleNames.CanAddUsers)]
public ActionResult AddRole(string newRole)
{
    var roleStore = new RoleStore<IdentityRole>(new ApplicationDbContext());
    var roleManager = new RoleManager<IdentityRole>(roleStore);
    var result = roleManager.Create(new IdentityRole(newRole));

    return result.Succeeded 
        ? Content(newRole + " added to database.") 
        : Content("Failed to add " + newRole + ".");
}

现在我检查并仔细检查了我登录的用户,因为在测试时有CanAddUsers这个角色,我没有被重定向到登录但只是接收Failed to add .

要确认,以下是我的路线,我找不到任何其他建议我的代码可能以不同的方式路由。

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

我确信在这一点上它可能是一个非常明显的错误,但我找不到它!

  • asp.net身份版本:2.2.1
  • asp.net mvc version:5.2.3
  • 实体框架6.3.1

1 个答案:

答案 0 :(得分:2)

如果您只想使用MapRoute,那么您应该知道将使用可选参数的名称(在您的情况下为id)。

然后,您应该将操作的参数重命名为id,或者明确说明您使用newRole变量addrole?newRole=superadmin

否则,正如其他人指出的那样,您可能更喜欢使用POST代替GET。