我已经构建了一些RESTful Web服务方法。
我为链接数据库中的表生成了一个实体框架控制器。
默认的get方法工作正常,但我没有使用put或post来更新数据库中的表。
这些是我工作的GET方法和我遇到问题的PUT方法。
我希望能够像这样执行PUT:http://localhost:52226/api/users/kevy?Name=kevin&StudyLang=spanish&NativeLang=english
正如您所看到的,有4个参数。我非常糟糕,并且不知道在这些方法中要改变什么来创建一个类似于在给定参数的数据库表中添加一行的URL。我还没有编辑webapiconfig.cs文件。这是默认值。如果我需要,我不知道如何编辑它。我没有收到错误消息,因为我真的不知道我在做什么,只是搞砸了。
来自控制器类的代码。我在put方法中写了一些随机文本:
namespace QuizLang.Controllers
{
public class UsersController : ApiController
{
private quizlangEntities db = new quizlangEntities();
private ActionResult View()
{
throw new NotImplementedException();
}
// GET: api/Users
public IQueryable<User> GetUsers()
{
return db.Users;
}
// GET: api/Users/id
[ResponseType(typeof(User))]
public IHttpActionResult GetUser(string id)
{
User user = db.Users.Find(id);
if (user == null)
{
return NotFound();
}
return Ok(user);
}
// PUT: api/Users/5
// THIS IS THE METHOD I WANT TO FIX
[ResponseType(typeof(void))]
public IHttpActionResult PutUser(string id, string name, string nativeLang, string studyLang, string grade)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
//no fucking clue what this does
//if (id != user.Id)
//{
// return BadRequest();
//}
User user = new User
{
Id = id,
Name = name,
NativeLang = nativeLang,
StudyLang = studyLang,
Grade = grade,
// …
};
// db.Users.Add(user);
db.Entry(user).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!UserExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return StatusCode(HttpStatusCode.NoContent);
}
答案 0 :(得分:0)
您可以为Web API操作显式指定HTTP方法:
[HttpPut]
public void PutUser(string id, string name, string nativeLang, string studyLang, string grade)