返回Json对象的IHttpActionResult

11

我在mvc api中创建了一个返回字符串的方法。但是,我想要返回Json Object而不是字符串。以下是我的代码。

    [AllowAnonymous]
    [HttpPost]
    [Route("resetpassword")]
    public IHttpActionResult ResetPassword(string email)
    {
        CreateUserAppService();
        string newPassword =_userAppService.ResetPassword(email);

        string subject = "Reset password";
        string body = @"We have processed your request for password reset.<br/><br/>";
        string from = ConfigurationManager.AppSettings[Common.Constants.FromEmailDisplayNameKey];
        body = string.Format(body, newPassword, from);

        SendEmail(email, subject, body, string.Empty);
        return Ok<string>(newPassword);
    }

这里返回 Ok<string>(newPassword);。现在我想返回一个 Json对象。我该如何返回 Json对象

4个回答

13

试试这个:

[AllowAnonymous]
[HttpPost]
[Route("resetpassword")]
public IHttpActionResult ResetPassword(string email)
{
    //...
    return Json(newPassword);
}

2
我不清楚为什么要返回一个普通字符串,所以我做了类似于 return Json(new {success = true}); 的操作。 - incutonez

9

实际上,您已经在使用关键的东西...

[HttpGet]
public IHttpActionResult Test()
{
     return Ok(new {Password = "1234"});
}

6
你需要将它作为CLR对象返回,以便Web API将其序列化为JSON,你可以创建自己的POCO类或按照以下方式进行操作:
 var passResponse =  new
              {
                  newPassword= yourNewPassword
              };

但是从安全角度来看,您现在的做法是不正确的。您绝不能通过电子邮件发送纯文本密码,应该通过提供重置电子邮件链接及一些令牌(token)的方式来重置用户密码,并让他们输入新密码。您现在的操作并不安全。


嗨Taiseer,谢谢你的回复。我尝试了你的代码。它返回给我"{ newPassword = FER3P74G }",但我想要像这样的东西{ "newPassword" :" FER3P74G" }。我该怎么做? - Ajay
尝试创建POCO类。 - Taiseer Joudeh
我该如何创建它?你能否贴出相应的代码? - Ajay
我尝试了 JsonConvert.SerializeObject(passResponse) 但它返回了 "{\"email\":\"ajayp@sarvatranetwork.com\"}",我不想要这些 \ - Ajay

1
创建一个返回对象。
public class PasswordResponse{
    public string Password {get;set;}
    //...other stuff to pass...
}

然后在响应中返回该类型的实例。 return OK(new PasswordResponse(){Password = newPassword}); 其中,保留HTML标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接