【发布时间】:2014-01-18 12:03:33
【问题描述】:
我有一个 MVC5 应用程序 ASP.NET,在创建新记录并单击提交时,它会调用我的 WebAPI(版本 2 - 新版本)将记录插入数据库。问题是,它没有在我的 WebAPI 中使用 POST 方法。无论如何,这是我的 MVC5,“创建”的前端应用程序代码:
[HttpPost]
public ActionResult Create(BulletinBoard bulletinBoard)
{
bulletinBoard.CreatedDate = DateTime.Now;
bulletinBoard.CreatedBy = HttpContext.User.Identity.Name;
response = client.PostAsJsonAsync("api/bulletinboard", bulletinBoard).Result;
if (response.IsSuccessStatusCode)
{
return View("Index");
}
else
{
LoggerHelper.GetLogger().InsertError(new Exception(string.Format(
"Cannot create a new feedback record due to HTTP Response Status Code not being successful: {0}", response.StatusCode)));
return View("Problem");
}
}
我已经在我的构造函数中定义了“客户端”,并为它提供了我的 WebAPI 的基本 URL - 请记住 GET 有效 - 所以我的 URL 没有问题。我也可以手动转到我的 WebAPI URL 并在我的浏览器中取回数据。
这是我的 WebAPI 代码:
// POST api/bulletinboard
public HttpResponseMessage PostBulletinBoard(BulletinBoard bulletinBoard)
{
if (ModelState.IsValid)
{
db.BulletinBoards.Add(bulletinBoard);
db.SaveChanges();
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, bulletinBoard);
return response;
}
else
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
}
这在我使用 WebAPI 版本 1 时有效,该版本对 GET 和 POST 和 PUT 方法有不同的命名约定。
因此,当调用 POST 请求的 URL 时(响应 = client.PostAsJsonAsync... 的行),该请求永远不会在我的 WebAPI 中命中我的 POST 方法,因此,没有记录插入到我的数据库中。我做错了什么?
【问题讨论】:
-
什么是状态码 (
response.StatusCode) 和来自服务器的确切响应负载 (response.Content.ReadAsStringAsync())?您可以在调试器中检查这些值并评估值(Shift+F9,然后只需键入表达式)。 -
@DarinDimitrov 我实际上在我的 Index 方法中使用 response.Content.ReadAsAsync() 从数据库中获取记录 - 所以当我导航到 WebAPI 的 GET URL (locahost/MyWebAPI/BulletinBoard ),我会在浏览器中返回代表数据的 JSON 对象列表。
-
我不是在问你在浏览器中得到了什么,而不是你从 GET 请求中得到什么 :-) 我要求你在你的客户端代码的
if (response.IsSuccessStatusCode)行放置一个断点和执行我之前在评论中写的内容。我对response.Content.ReadAsStringAsync()的值特别感兴趣。基本上,这将告诉您远程服务器响应您的 POST 请求返回的内容。您正在查找的错误消息可能会简单地包含在此字符串中。 -
抱歉,您编辑了您的评论 - 如果我没记错的话,您问我使用 ReadAsStringAsync 得到了什么。我会放一个断点,但如果我没记错的话,那是一个 500 错误。给我几分钟
-
@DarinDimitrov - 对不起,我完全误解了你。我认为出于某种原因你想要我的 GET 响应内容。这是我的回复内容:我认为这为我指出了问题所在的正确方向:
标签: c# asp.net-mvc-4 asp.net-web-api asp.net-mvc-5