0

I am trying to built a simple API using ASP.NET Core MVC.

I have successfully built an api with get, post and edit and delete functions. However the Postman JSON raw post results in Null value however if I use form data, it works perfectly.

I want to send the data as raw json, any idea what am I doing wrong?

My model

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

Data Context:

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; }
}

Controller

[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");
    }
}

View File corresponding to Add

<!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>

1 Answer 1

5

You need to add [FromBody] attribute if you want accept Json raw request data.

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

    return RedirectToAction("Index");
}

enter image description here

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you! I have tried previously with the [frombody] but it turns out that I was not handling the Postman correctly and using "UserID":"1" instead of "UserID":1

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.