API POST 上的空参数

Null parameter on API POST

网络控制器:

public void SignIn(UserInfo user, IList<string> roleList, bool rememberMe = false)
{
    Audit audit = new Audit()
        {                
            UserName = user.UserName,
            Role = roleList[0].ToString(),
            ControllerAccessed = "Login",
            MethodAccessed = "Login",
            TimeAccessed = DateTime.UtcNow,
            IsLogin = true,               
            Is_Report = false,
            Report_Type = null,
            Report_Name = null
        };
     PostAPIData<int>(apiBaseUrl + "api/AuditAPI/LogUIAudit", audit);
}

public class Audit
{        
    public string UserName { get; set; }
    public string Role { get; set; }        
    public string ControllerAccessed { get; set; }
    public string MethodAccessed { get; set; }
    public DateTime TimeAccessed { get; set; }
    public bool IsLogin { get; set; }
    public bool Is_Report { get; set; }
    public string Report_Type { get; set; }
    public string Report_Name { get; set; }
    
}

public T PostAPIData<T>(string url, object obj)
{
    using (HttpClient client = new HttpClient())
    {
        var responseTask = client.PostAsJsonAsync(url, obj);
        responseTask.Wait();
        var result = responseTask.Result;
    }
}

在上面的 SignIn 方法中,我通过各自的模型 class 传递了 2 个不同的 api 调用。所以我在PostAPIData方法中定义为objurl 之一是 https://localhost:44306/api/AuditAPI/LogUIAudit。当此代码命中以下 API 控制器时,参数变为空:

API 控制器:

[Route("api/AuditAPI/LogUIAudit")]
[HttpPost]
public int LogUIAudit(Audit AuditEntry)
{
} 

我尝试了以下转换。但是 none 有效。

1:

StringContent content = new StringContent(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json");
var responseTask = client.PostAsJsonAsync(url, content);    

2:

StringContent content = new StringContent(JsonConvert.SerializeObject(AuditEntry), Encoding.UTF8, "application/json");
var responseTask = client.PostAsync(url, content); 

3:

Audit AuditEntry = (Audit)obj;
StringContent content = new StringContent(JsonConvert.SerializeObject(AuditEntry), Encoding.UTF8, "application/json");
var responseTask = client.PostAsync(url, content);

客户端和服务器都是运行。但是当我调试代码时,该模型的所有属性 class 都显示为 null。

为了在 API Controller 中获取数据,您应该使用 FromBody 属性正确绑定模型:

[Route("api/AuditAPI/LogUIAudit")]
[HttpPost]
public int LogUIAudit([FromBody]Audit AuditEntry)
{

}