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
方法中定义为obj
。 url
之一是 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)
{
}
网络控制器:
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
方法中定义为obj
。 url
之一是 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)
{
}