3
我有下面的类,它使用实体框架来运行其任务编辑方法
仓储类
public class LibraryRepository
{
LibraryContext context = new LibraryContext();
public void EditBook(Book book)
{
context.Entry(book).State = System.Data.Entity.EntityState.Modified;
}
}
所以我想用这个EditBook我的方法Web API
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);
}
}
我想上面的Web API使用MVC项目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项目的Controller文件夹我已经创建了下面的类和控制器与前端交互
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技术,仍然学习阶段,你能建议我能在这里做什么 – kez
你是否在任何地方调用'context.SaveChanges()'?如果没有,在'context.Entry(book).State = System.Data.Entity.EntityState.Modified;' – Developer
@Developer之后调用它不,我不应该吗? – kez