我有一个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");
}
}
我已经在构造函数中定义了“client”并为其提供了我的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方法,因此,没有记录插入到我的数据库中。我做错了什么?
答案 0 :(得分:1)
根据评论,您似乎已发布无效数据(根据您在BulletinBoard
模型中定义的验证规则),此验证失败。因此,要解决此问题,请确保发送有效数据。
答案 1 :(得分:0)
我认为可能有一些原因导致它没有达到你的post方法。这是我的Post方法示例。您应注意的事项是方法名称和 FromBody属性
public async Task<HttpResponseMessage> Post([FromBody]FoodProduct foodProduct)
{
UnitOfWork.FoodRepository.Edit(foodProduct);
await UnitOfWork.SaveAsync();
return Request.CreateResponse(HttpStatusCode.OK);
}
我也喜欢在我的控制器上使用这个新的RoutePrefix属性,它工作得很好,看起来不错。
[RoutePrefix("api/Food")]
public class FoodController : BaseApiController
{
///some code here
}