这可能是非常基本的东西,但是我很难弄清楚我要去哪里。

我正在尝试从POST正文获取字符串,但是“jsonString”仅显示为null。我也想避免使用模型,但这也许是不可能的。我用PostMan编写的代码是以下代码:

[Route("Edit/Test")]
[HttpPost]
public void Test(int id, [FromBody] string jsonString)
{
    ...
}

也许这是我对 postman 做的不正确的事情,但是我一直在尝试在正文的值部分使用x = www-form-urlencoded部分,其中使用“= test”(如关于该主题的其他问题所示) key 为jsonString,什么也没有。我也尝试过使用原始文本和原始文本/纯文本。我得到了ID,所以我知道网址是正确的。任何帮助,将不胜感激。

目前,PostMan的设置如下:

POST http://localhost:8000/Edit/Test?id=111
key = id  value = 111
Body - x-www-form-urlencoded
key = jsonString  value = "=test"

最佳答案

通过使用[FromBody]声明jsonString参数,您可以告诉ASP.NET Core使用输入格式器将提供的JSON(或XML)绑定(bind)到模型。因此,如果您提供一个简单的模型类,那么您的测试应该可以工作

public class MyModel
{
    public string Key {get; set;}
}

[Route("Edit/Test")]
[HttpPost]
public void Test(int id, [FromBody] MyModel model)
{
    ... model.Key....
}

和一个发送的JSON
{
    key: "value"
}

当然,您可以通过访问 Controller 中的HttpContext.Request来跳过模型绑定(bind)并直接检索提供的数据。 HttpContext.Request.Body属性为您提供内容流,或者您可以通过HttpContext.Request.Forms访问表单数据。

由于类型安全,我个人更喜欢模型绑定(bind)。

关于c# - FromBody字符串参数为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40853188/

10-09 18:06