【问题标题】:Model passed to web api is null传递给 web api 的模型为空
【发布时间】:2015-02-22 04:18:59
【问题描述】:

用户输入他/她的登录详细信息后,我的控制器中有以下代码行

var userProfile = UserService.UserLogin(userLogin);

调用外部 Web API 时引用的静态类

  public static UserProfile UserLogin(UserLogin userLogin)
    {
        var client = new RestClient(Url);
        var request = new RestRequest("api/UserLoginApi/", Method.GET) { RequestFormat = DataFormat.Json };
        request.AddBody(userLogin);

        var response = client.Execute(request);

        var userProfile = JsonConvert.DeserializeObjectAsync<UserProfile>(response.Content).Result;

        return userProfile;
    }

上面调用这个Web Api没有问题,我可以打断点设置

 public UserProfile Get([FromBody] UserLogin userLogin)
 {
        UserProfile userProfile;

     return userProfile;
 }

但是当我在 Web Api 中检查 userLogin 内的值时,它们是否为空?

现在逐步通过控制器,userLogin 有我输入的电子邮件地址和密码,再次进入 UserService.Login 值仍然存在,当它到达时

var response = client.Execute(request); 

我展开请求并看到参数的计数为 1,但是当它在我的 Web Api GET 中遇到断点时,userLogin 为空?

我也在 UserService.Login 中尝试过这个

        request.AddBody(new UserLogin
        {
            EmailAddress = userLogin.EmailAddress,
            Password = userLogin.Password
        });

但是再次没有运气,我在这里做错了什么?

【问题讨论】:

  • 它适用于我request.AddObject(userLogin);

标签: c# asp.net-web-api asp.net-mvc-5 restsharp


【解决方案1】:

我建议您在使用 FromBody 时必须使用 Post 方法来发送数据。

var request = new RestRequest("api/UserLoginApi/", Method.POST) { RequestFormat = DataFormat.Json };

根据您的方法。

public UserProfile Get([FromBody] UserLogin userLogin)
{
 UserProfile userProfile;    
 return userProfile;
}

您的控制器操作是 Get 方法,当您使用 Url api/UserLoginApi/ 和 Get Method 请求时,它将调用上述方法,如果您按照我的建议更改帖子,您还必须更改控制器方法名称如果您不这样做想要这样做,然后像这样更新控制器操作。

public UserProfile Get([FromUri] UserLogin userLogin)
     {
        UserProfile userProfile;    
         return userProfile;
     }

用下面的东西打电话。

 public static UserProfile UserLogin(UserLogin userLogin)
    {
        var client = new RestClient(Url);
        var request = new RestRequest("api/UserLoginApi/", Method.GET) { RequestFormat = DataFormat.Json };
        request.AddQueryParameter("EmailAddress", userLogin.EmailAddress);
        request.AddQueryParameter("Password", userLogin.Password);    
        var response = client.Execute(request);    
        var userProfile = JsonConvert.DeserializeObjectAsync<UserProfile>response.Content).Result;    
        return userProfile;
    }

如果您决定使用 Post 方法,则进行控制器操作,例如

public UserProfile Post([FromBody] UserLogin userLogin)
{
 UserProfile userProfile;    
 return userProfile;
}

你应该这样打电话。

public static UserProfile UserLogin(UserLogin userLogin)
    {
        var client = new RestClient(Url);
        var request = new RestRequest("api/UserLoginApi/", Method.POST) { RequestFormat = DataFormat.Json };
        request.AddBody(userLogin);

        var response = client.Execute(request);

        var userProfile = JsonConvert.DeserializeObjectAsync<UserProfile>(response.Content).Result;

        return userProfile;
    }  

【讨论】:

    猜你喜欢
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 2012-10-05
    • 2012-12-14
    • 1970-01-01
    • 2017-12-10
    • 2018-08-22
    相关资源
    最近更新 更多