【发布时间】:2020-04-03 20:24:17
【问题描述】:
我正在尝试将我的模型序列化为 Json 以进行 POST 请求,但每次发出请求时,由于非序列化对象,它会给出 400 Bad Request。
public class AppVersionModel
{
public Project project { get; set; }
public String active { get; set; }
public String createdBy { get; set; }
public String description { get; set; }
public String name { get; set; }
public String obfuscatedId { get; set; }
public String owner { get; set; }
/*public String AppName { get; set; }
public String AppVersion { get; set; }
public int AppId { get; set; }
public String Description{ get; set; }
public String DescriptionForApp { get; set; }
public String DescriptionForVersion { get; set; }
public String DevPhase { get; set; }
public String DevStrategy { get; set; }
public String IssueTemplate { get; set; }
public String UserName { get; set; }*/
}
public class Project
{
/*public String createdBy { get; set; }*/
[JsonIgnore]
public String description { get; set; }
[JsonIgnore]
public String issueTemplateId { get; set; }
[JsonIgnore]
public String name { get; set; }
}
控制器如下。
[System.Web.Mvc.HttpPost]
public ActionResult onboard([FromUri] AppVersionModel appVersionModel)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("<any url>");
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes($"{username}:{password}")));
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Accept.Clear();
//HTTP POST
try
{
/*string json = JsonConvert.SerializeObject(appVersionModel);*/
var postTask = client.PostAsJsonAsync<AppVersionModel>("projectVersions",appVersionModel);
/*var postTask = client.PostAsJsonAsync<AppVersionModel>("appVersionModel", appVersionModel);*/
postTask.Wait();
var result = postTask.Result;
if (result.IsSuccessStatusCode)
{
return RedirectToAction("Home/Index");
}
else if (result.StatusCode == System.Net.HttpStatusCode.Unauthorized)
{
ModelState.AddModelError(string.Empty, "Authentication Error. Please contact administrator.");
return View(appVersionModel);
}
ModelState.AddModelError(string.Empty, "Server Error. Please contact administrator.");
}
catch (HttpException ex)
{
ModelState.AddModelError(string.Empty, "Exception Occured in Http Request.");
}
return View(appVersionModel);
}
}
我收到 400 Bad Request Error,我的理解是,作为一种复杂类型的模型对象,即“项目”,因此它没有序列化模型对象,因此请求没有获得所需的请求正文。
任何人都可以在这方面帮助我。
【问题讨论】:
-
如果您使用 Post,请将 [FromUri] 更改为 [FromBody] 并尝试使用 postman。
-
@FlorimMaxhuni 他在进入自己的控制器时没有问题,他在发送到 api 时遇到问题。
-
@Rezwan 所以你正在使用另一个库来告诉它忽略你项目的道具。在客户端 API 端,它试图拦截您的 json 并将其分解为一个对象,您的忽略正在阻止 API 收到不映射 1:1 的内容。 API 认为您将完全不同的对象传递给它没有映射的端点。将您的模型抽象为一个新的视图模型,以便 api 接收将包含哪些道具,或者您需要将忽略调用调整为仅 json 写入操作
-
更改为 FromBody 没有帮助
-
我只是删除了 jsonIgnore 并将其添加为 jsonProperty 但仍然失败@TravisActon
标签: c# asp.net json asp.net-mvc json.net