【问题标题】:Model not binding on RedirectToRoute模型未绑定到 RedirectToRoute
【发布时间】:2015-07-23 21:45:34
【问题描述】:

对于我认为是一个常见问题的答案,我已经四处寻找答案,但一直未能找到解决方案……所以问题如下:

我有以下型号:

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. 我了解我无法传递具有枚举和其他复杂数据类型的复杂对象,因此所有内容都仅限于字符串。

所以...对于我的生活,我无法弄清楚为什么模型没有绑定并希望在这里得到一些帮助。

【问题讨论】:

  • 我不认为这是重复的,因为我只使用字符串,根据链接中列出的文章,这些字符串应该可用于模型绑定..
  • 不,您使用的是复杂类型,UserModel - 您需要在前面加上 [FromUri]
  • 谢谢谢谢谢谢!!!! From URI 属性完全成功了。 @levelnis:请发表一个答案,我会这样标记。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-07-21
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 2012-06-18
    • 2014-04-10
    • 1970-01-01
    相关资源
    最近更新 更多