【问题标题】:Edit method in web apiWeb api中的编辑方法
【发布时间】: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");
    }
 }

但是这里编译时没有任何错误,当我选择一本书来编辑其获取正确的书时,但是一旦我对其进行更改并点击保存它的 不保存更新的详细信息,什么我的方法错了。

ViewCreateDelete 方法像这种方法一样工作正常。唯一的问题是这个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


【解决方案1】:

你在任何地方打电话给context.SaveChanges()吗?如果没有,请在context.Entry(book).State = System.Data.Entity.EntityState.Modified; 之后调用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 2018-03-23
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多