繁体   English   中英

Postman 测试发送字符串到 Web Api 接受字符串是 null

[英]Postman Testing send string to Web Api accepting string is null

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

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

[HttpPost]
public IHttpActionResult UpdateActivity(Activity activity)

以上与 Postman 一起使用,传递 JSON 内容类型和所有属性。 我在其他项目上做过这个。

然而

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

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

Postman 我尝试了很多方法

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

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

{ "Id" = "5808786fa3e9ec79546b3c71" } 

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

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

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

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

因此,在原始海报的情况下,在 Postman 中,如果您将 Body 设置为 raw、JSON (application/json) 然后将“5808786f​​a3e9ec79546b3c71”作为值,它将起作用。

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

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

{ "5808786fa3e9ec79546b3c71" }

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

{ "Id" : "5808786fa3e9ec79546b3c71" } 

您的有效负载无效。

改变-->

 { "Id" = "5808786fa3e9ec79546b3c71" } 

到-->

{ "Id" : "5808786fa3e9ec79546b3c71" } 

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

    [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

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

使用表单数据而不是 raw-json

Key - eventId
Value - "5808786fa3e9ec79546b3c71"

这对我有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM