模型没有绑定到RedirectToRoute

本文关键字:RedirectToRoute 绑定 模型 | 更新日期: 2023-09-27 18:04:16

我已经上下搜索了答案,我认为这将是一个常见的问题,但还没有找到一个解决方案…那么问题来了:

我有以下模型:

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中做跟踪时,我可以看到所有适当的查询字符串参数被传递。
  3. 我明白,我不能传递复杂的对象与枚举和其他复杂的数据类型,所以一切都限于字符串。

所以…对于我的生命,我不明白为什么模型不能绑定,希望这里有一些帮助。

模型没有绑定到RedirectToRoute

如果您将复杂类型作为Web API控制器的参数并通过GET访问它,则需要告诉控制器它可以从请求中发送的querystring参数创建对象。添加[FromUri]属性,您的对象应该创建得很好:

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