【问题标题】:IHttpActionResult return Json objectIHttpActionResult 返回 Json 对象
【发布时间】:2015-01-25 17:43:56
【问题描述】:

我在mvc api 中创建了一个返回字符串的方法。但我不想返回string,而是想返回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&lt;string&gt;(newPassword); 现在我想返回Json object。如何返回 Json 对象

【问题讨论】:

    标签: json asp.net-mvc-4 asp.net-web-api


    【解决方案1】:

    试试看:

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

    【讨论】:

    • 我不清楚我为什么要返回一个纯字符串,所以我做了类似return Json(new {success = true});
    【解决方案2】:

    其实你已经在使用关键的东西了……

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

    【讨论】:

      【解决方案3】:

      您需要将其作为 CLR 对象返回,以便 Web API 将其序列化为 JSON,您可以创建自己的 POCO 类或这样做:

       var passResponse =  new
                    {
                        newPassword= yourNewPassword
                    };
      

      但是从安全的角度来看,您所做的事情是不正确的,您应该绝不通过电子邮件发送纯密码,您应该通过向他们提供带有一些令牌的重置电子邮件链接到您的门户网站来重置用户密码,并且他们应该输入新密码。你在这里做的事情是不安全的。

      【讨论】:

      • 您好,Taiseer,谢谢您的回复。我试过你的代码。它返回给我“{ newPassword = FER3P74G }”但我想要类似{ "newPassword" :" FER3P74G" } 的东西。我该怎么做?
      • 然后尝试创建 POCO 类
      • 如何创建它?你能把它的代码贴出来吗?
      • 我试过JsonConvert.SerializeObject(passResponse) 但它给了"{\"email\":\"ajayp@sarvatranetwork.com\"}" 我不想要这些``
      【解决方案4】:

      创建一个返回对象。

      public class PasswordResponse{
          public string Password {get;set;}
          //...other stuff to pass...
      }
      

      然后在您的响应中返回该类型的实例。

      return OK(new PasswordResponse(){Password = newPassword});

      【讨论】:

        猜你喜欢
        • 2018-08-11
        • 1970-01-01
        • 2019-05-05
        • 2017-07-18
        • 2017-06-12
        • 2015-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多