【发布时间】:2016-09-17 18:19:05
【问题描述】:
我有以下类,它使用实体框架来操作它的任务
存储库类
public class LibraryRepository
{
LibraryContext context = new LibraryContext();
public void EditBook(Book book)
{
context.Entry(book).State = System.Data.Entity.EntityState.Modified;
}
}
所以我尝试在我的 Web API 中使用这个 EditBook 方法
Web API 控制器类
public class BooksWebAPIController : ApiController
{
private LibraryRepository db = new LibraryRepository();
[ResponseType(typeof(void))]
public IHttpActionResult PutBook(int id, Book book)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != book.Book_Id)
{
return BadRequest();
}
db.EditBook(book);
return StatusCode(HttpStatusCode.NoContent);
}
}
我正在尝试在 MVC 项目中使用上面的 Web API EditBook URL(作为我的客户端层)
所以我在 MVC 项目的 Model 文件夹中创建了一个客户端类,如下所示
LibraryClient 类
public class LibraryClient
{
private string BOOK_URL = "http://localhost:13793/api/Books";
public bool Edit(Book book)
{
try
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(BOOK_URL);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = client.PutAsJsonAsync("Books/" + book.Book_Id, book).Result;
return response.IsSuccessStatusCode;
}
catch
{
return false;
}
}
}
然后在 MVC 项目的控制器文件夹中,我创建了以下类和控制器以与前端交互
BooksController 类
public class BooksController : Controller
{
[HttpGet]
public ActionResult Edit(int id)
{
LibraryClient lc = new LibraryClient();
Book book = new Book();
book = lc.GetBook(id);
return View("Edit", book);
}
[HttpPost]
public ActionResult Edit(Book book)
{
LibraryClient pc = new LibraryClient();
pc.Edit(book);
return RedirectToAction("BookswithAuthers", "BookWithAuther");
}
}
但是这里编译时没有任何错误,当我选择一本书来编辑其获取正确的书时,但是一旦我对其进行更改并点击保存它的 不保存更新的详细信息,什么我的方法错了。
View、Create 和 Delete 方法像这种方法一样工作正常。唯一的问题是这个Edit 方法
【问题讨论】:
-
@jimpaine 实际上我还是这个 Web API 技术的婴儿,还在学习阶段,你能建议我在这里做什么
-
你在哪里打电话给
context.SaveChanges()?如果没有,在context.Entry(book).State = System.Data.Entity.EntityState.Modified;之后调用 -
@Developer 不,我不应该吗?
-
这就是您在实体框架中“提交”更改的方式。但我想知道你的其他方法在没有
context.SaveChanges()调用的情况下是如何工作的。 -
@Kez 你有你用于 WebAPI 项目的路线。我还希望该方法被称为 Put 而不是 PutBook 或在该方法上使用 HttpPut 属性。
标签: c# asp.net-mvc entity-framework asp.net-web-api