Bayram Akbuz
Bayram Akbuz

Reputation: 75

Asp.Net Core 3.1 Model Binding Doesn't Work

Model binding doesn't work on asp.net core 3.1 version. I have no problem with previous dotnet core versions or .net framework version. Somebody help me please.

Best regards

JavaScript code:

var postData = { "createdFrom": "2020-07-18", "createdTo": "2020-07-19", "message": "test", "logLevel": "Error" };

fetch('/log/list', {
    method: "post",
    body: JSON.stringify(postData),
    headers: {
        "Content-Type": "application/json"
    }
})
.then(res => res.json())
.then(res => {
    console.log(res);
}).catch(err => {
    console.error(err);
});

C# code:

[HttpPost]
public IActionResult List([FromBody] LogSearchModel searchModel) // searchModel is null
{
    string rawBodyStr = "";
    using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8))
    {
        rawBodyStr = reader.ReadToEndAsync().Result;
    }

    // rawBodyStr is null
}

public class LogSearchModel
{
    [DisplayName("Başlangıç tarihi")]
    [UIHint("DateNullable")]
    public DateTime? CreatedFrom { get; set; }

    [DisplayName("Bitiş tarihi")]
    [UIHint("DateNullable")]
    public DateTime? CreatedTo { get; set; }

    [DisplayName("Açıklama")]
    public string Message { get; set; }

    [DisplayName("Olay türü")]
    public int LogLevel { get; set; }
}

Startup.cs

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddScoped<LogManager>();

        services.AddControllersWithViews();
    }

Upvotes: 0

Views: 98

Answers (1)

Rena
Rena

Reputation: 36715

Your LogLevel is type of int,but you pass the string data.

Change from:

var postData = { "createdFrom": "2020-07-18", "createdTo": "2020-07-19", 
                 "message": "test", "logLevel": "Error" };

To:

var postData = { "createdFrom": "2020-07-18", "createdTo": "2020-07-19",
                 "message": "test", "logLevel": 1 };

Upvotes: 1

Related Questions