C#中的HttpPut请求

时间:2015-07-31 00:45:02

标签: c# asp.net asp.net-web-api asp.net-routing http-put

我对这个Web API很新,我正在尝试在我的计算机上设置简单的http请求到本地数据库。我有一个看起来像这样的获取请求:

[HttpGet]
[Route("")]
[Route("{ID:int}")]
public IQueryable<ListTable> Get(int id = -1)
{
    if(id == -1)
        return db.ListTables;
    else
        return db.ListTables.Where(lt => lt.ID == id);
}

这只返回数据库中的所有项目或与指定ID相关的一个项目。现在我正在尝试发出一个put请求,我可以在其中添加一个新项目到数据库或编辑与某个ID相关的项目。我正在尝试这样的事情:

[HttpPut]
[Route("{ID:int}")]
[Route("{ID:int}/{TITLE:string}")]
[Route("{ID:int}/{TITLE:string}/{DESCRIPTION:string}")]
public ListTable Put(int id = -1, string title = null, string descr = null)
{
    //if ID == -1 add a new item to the DB
    //else add title and description to the item with the specified ID
}

我不确定如何将新项添加到数据库并保存更改。我尝试了类似db.ListTables.Add(new ListTable())db.SaveChanges()的内容,但实际上并没有保存任何内容,因为当我再次调用Get()方法时,新项目不存在。

2 个答案:

答案 0 :(得分:1)

您需要新建一个实体实例以添加[ListTable],然后将其添加到您的数据库上下文中(假设它db基于您的GET示例。一旦将其添加到上下文中,那么您.SaveChanges() - 我假设您的ListTable实体包含名为TitleDescription的列(更改这些行)无论你把它们命名为什么):

ListTable listTableToAdd = new ListTable() 
{
    Title = title,
    Description = descr
}
db.ListTables.Add(listTableToAdd);
db.SaveChanges();

答案 1 :(得分:0)

您需要在new ListTable()之后设置属性。像new ListTable() { Title = title, ... }

这样的东西