【问题标题】:Postman Testing send string to Web Api accepting string is null邮递员测试将字符串发送到 Web Api 接受字符串为空
【发布时间】:2017-03-02 20:06:57
【问题描述】:

我一直在使用 Postman 测试所有 Get、Create、Update 方法,其中 Get 没有传递任何内容。 Create 和 Update 传入带有 Activity 对象的原始 json,该对象具有与 C# 类匹配的多个属性

所以这个创建和更新的签名工作正常

[HttpPost]
public IHttpActionResult UpdateActivity(Activity activity)

Above 与 Postman 一起使用,传入 JSON 内容类型和所有属性。我已经在其他项目中这样做了。

但是

我试图简单地传入一个字符串,无论如何它都是空的

public IHttpActionResult DeleteActivity([FromBody]string Id)
{
    // delete
    var del = ActivityService.DeleteActivity(Id);
    return Ok(del);
}

邮递员我尝试了很多方法

http://localhost:49810/api/activityapi/deleteactivity

我已经尝试了很多基于博客和谷歌搜索这样一个例子的方法

{ "Id" = "5808786fa3e9ec79546b3c71" } 

【问题讨论】:

  • 在所示场景中,我将使用删除动词并从路由中获取 id,或者您是否有特定需要在正文中传递它?

标签: c# json asp.net-web-api postman


【解决方案1】:

我知道这是一个较老的问题,但我想帮助那些可能遇到类似问题的人,因为我能够解决这个问题。

在 WebAPI 控制器中,我的方法设置为

[HttpPost]
public IHttpActionResult Create([FromBody] int eventId)
{
    ....
}

为了让它在 Postman 中正确测试,您必须:在正文中,设置为 raw,确保 JSON (application/json) 已设置,然后添加像 2 这样的值.. 不像 { "eventId ":2 } 这是正确的 JSON 值,然后它将起作用。

因此,在原始发帖人的情况下,在 Postman 中,如果您将 Body 设置为 raw、JSON (application/json),那么“5808786f​​a3e9ec79546b3c71”作为值将起作用。

【讨论】:

    【解决方案2】:

    在 Postman 中确保 body 设置为 raw 并选择 json 并在 body 中用引号写“你的字符串”。不要使用 {} 来包围它,因为那是一个复杂的对象

    【讨论】:

      【解决方案3】:

      在正文中尝试以下内容,内容类型为 application/json

      { "5808786fa3e9ec79546b3c71" }
      

      当你这样指定它时,它会尝试反序列化为具有 Id 属性的复杂类型

      { "Id" : "5808786fa3e9ec79546b3c71" } 
      

      【讨论】:

      • 我也在努力解决同样的问题。只需将“5808786f​​a3e9ec79546b3c71”放入正文中即可。
      【解决方案4】:

      老问题,但对于那些仍然想知道的人,我建议将您的字符串作为查询参数发送。以这样的方法为例:

          [AllowAnonymous]
          [HttpGet("resendEmailConfirmtionLink")]
          public async Task<IActionResult> ResendEmailConfirmationLink(string email)
          {
              var user = await _userManager.FindByEmailAsync(email);
      
              if (user == null) return Unauthorized();
      
              var origin = Request.Headers["origin"];
              var token = await _userManager.GenerateEmailConfirmationTokenAsync(user);
              token = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(token));
      
              var verifyUrl = $"{origin}/verifyEmail?token={token}&email={user.Email}";
              var message = $"<p>Please click the below link to verify your email address:</p><p><a href='{verifyUrl}'>Click to verify email</a></p>";
      
              await _emailSender.SendEmailAsync(user.Email, "Please verify email", message);
      
              return Ok("Email verification link resent");
          }
      

      此方法需要一个名为 email 的字符串的键值对。您可以发送您的请求,例如“http://localhost:5000/api/account/verifyEmail?email=myemail@test.com”,或者在 Postman 中,将其添加为如下参数: postman query params

      【讨论】:

        【解决方案5】:

        您的有效负载无效。

        改变-->

         { "Id" = "5808786fa3e9ec79546b3c71" } 
        

        到-->

        { "Id" : "5808786fa3e9ec79546b3c71" } 
        

        【讨论】:

        • 我在阅读有关添加 = 没有 valuename "Id" 等的博客时不小心发布了该消息,但尝试了它,但仍然 NULL 进入 web api
        猜你喜欢
        • 1970-01-01
        • 2019-04-11
        • 2021-04-05
        • 1970-01-01
        • 2016-06-30
        • 2016-08-02
        • 2017-09-10
        • 2016-11-21
        • 2020-01-18
        相关资源
        最近更新 更多