模型不在RedirectToRoute上绑定

时间:2015-07-22 15:03:35

标签: c# asp.net-web-api model-binding

我上下搜索了我认为常见问题的答案,但未能找到解决方案......所以这就是问题所在:

我有以下型号:

public class UserModel
    {
        public string userType { get; set; }
        public string userName { get; set; }
        public string passWord { get; set; }
        public string userClaim { get; set; }
        public string redirectAction { get; set; }
        public string jsonWebToken { get; set; }
        public string message { get; set; }

    }

我在Web API控制器中“填充”此模型:

return RedirectToRoute("Default", new
            {
                controller = "Redirect",
                action = "SsoRedirect",
                method = "Get",
                userType = thisUser.userType,
                userName = thisUser.userName,
                passWord = thisUser.passWord,
                userClaim = thisUser.userClaim,
                redirectAction = thisUser.redirectAction,
                jsonWebToken = thisUser.jsonWebToken,
                message = thisUser.message,

            });

然后将它传递给另一个控制器,如:

[HttpGet]
[Route("SsoRedirect")]     
public IHttpActionResult SsoRedirect(UserModel myUser)
{
    ....
}

问题:myUser即将成为null。模型上没有任何属性受到约束。

这是我确定的:

  1. 我的路由很好,因为SsoRedirect中的断点实际上是被击中的。
  2. 当我在fiddler中进行跟踪时,我可以看到所有相应的查询字符串参数被传递。
    1. 我知道我无法使用Enums和其他复杂数据类型传递复杂对象,所以一切都限于字符串。
  3. 所以......对于我的生活,我无法弄清楚为什么这个模型没有约束力,希望能在这里提供一些帮助。

1 个答案:

答案 0 :(得分:1)

如果您将复杂类型作为参数提供给Web API控制器并通过GET访问它,则需要告诉控制器它可以从请求中发送的查询字符串参数创建对象。添加[FromUri]属性,您的对象应该可以正常创建:

[HttpGet]
[Route("SsoRedirect")]     
public IHttpActionResult SsoRedirect([FromUri]UserModel myUser)
{
    ....
}