首页 > 解决方案 > Postman JSON 不适用于 ASP.NET Core Web API

问题描述

我正在尝试使用 ASP.NET Core MVC 构建一个简单的 API。

我已经成功构建了一个具有获取、发布、编辑和删除功能的 api。然而,邮递员 JSON 原始帖子会产生 Null 值,但是如果我使用表单数据,它会完美运行。

我想将数据作为原始 json 发送,知道我做错了什么吗?

我的模型

[Table("continous value monitoring")]
public class Continous
{
        [Key]
        public int UserID { get; set; }
        public float Value { get; set; }
        public string ReadingType { get; set; }
}

数据上下文:

public class DataContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionBuilder)
    {
            var builder = new ConfigurationBuilder()
                                                 .SetBasePath(Directory.GetCurrentDirectory())
                                                 .AddJsonFile("appsettings.json");

            var configuration = builder.Build();
            optionBuilder.UseMySql(configuration
                ["ConnectionString:DefaultConnection"]);
        }

        public DbSet<Continous> Continous { get; set; }
}

控制器

[Produces("application/json")]
[Route("continous")]
public class ContinousController : Controller
{
    private DataContext db = new DataContext();

    [Route("")]
    [Route("index")]
    [Route("~/")]
    public IActionResult Index()
    {
        ViewBag.Continous = db.Continous.ToList();
        return View();
    }

    [HttpGet]
    [Route("Add")]
    public IActionResult Add()
    {
         return View("Add");
    }

    [HttpPost]
    [Route("Add")]
    public IActionResult Add(Continous continous)
    {
        db.Continous.Add(continous);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    [HttpGet]
    [Route("Delete/{UserID}")]
    public IActionResult Delete(int UserID)
    {
        db.Continous.Remove(db.Continous.Find(UserID));
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    [HttpGet]
    [Route("edit/{UserID}")]
    public IActionResult Edit(int UserID)
    {
        return View("Edit", db.Continous.Find(UserID));
    }

    [HttpPost]
    [Route("edit/{UserID}")]
    public IActionResult Edit(int UserID, Continous continous)
    {
        db.Entry(continous).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
}

查看添加对应的文件

<!DOCTYPE html>
<html>
<head>
    <meta name="viewpoint" content="width=device-width" />
    <title>Add</title>    
</head>
<body>

    <form method="post" asp-controller="continous" asp-action="add">
        <table>
            <tr>
                <td>UserID</td>
                <td>
                    <input type="number" asp-for="UserID" min="0" required="required" />
                </td>
            </tr>
            <tr>
                <td>Value</td>
                <td>
                    <input type="number" asp-for="Value" min="0" required="required" />
                </td>
            </tr>
            <tr>
                <td>Reading Type</td>
                <td>
                    <input type="text" asp-for="ReadingType" required="required" />
                </td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td>
                    <input type="submit" value="Save" />
                </td>
            </tr>




        </table>
    </form>
</body>
</html>

标签: visual-studioasp.net-core-mvc

解决方案


如果要接受 Json 原始请求数据,则需要添加 [FromBody] 属性。

[HttpPost]
[Route("Add")]
public IActionResult Add([FromBody]Continous continous)
{
        
    db.Continous.Add(continous);
    db.SaveChanges();

    return RedirectToAction("Index");
}

在此处输入图像描述


推荐阅读