2016-11-19 90 views
1

我正在学习Web Api,我有点困惑。脚手架自动WebApi控制器代

当我为我的Person类创建控制器时,它如何定义哪种方法是GET,POST,DELETE?它是定义它的方法前缀吗?这是一个约定将方法的前缀设置为GETPOST等?

生成的控制器是:

public class PeopleController : ApiController 
{ 
    private PersonContext db = new PersonContext(); 

    // GET: api/People 
    public IQueryable<Person> GetPeople() 
    { 
     return db.People; 
    } 

    // GET: api/People/5 
    [ResponseType(typeof(Person))] 
    public IHttpActionResult GetPerson(int id) 
    { 
     Person person = db.People.Find(id); 

     if (person == null) 
     { 
      return NotFound(); 
     } 

     return Ok(person); 
    } 

    // PUT: api/People/5 
    [ResponseType(typeof(void))] 
    public IHttpActionResult PutPerson(int id, Person person) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     if (id != person.Id) 
     { 
      return BadRequest(); 
     } 

     db.Entry(person).State = EntityState.Modified; 

     try 
     { 
      db.SaveChanges(); 
     } 
     catch (DbUpdateConcurrencyException) 
     { 
      if (!PersonExists(id)) 
      { 
       return NotFound(); 
      } 
      else 
      { 
       throw; 
      } 
     } 

     return StatusCode(HttpStatusCode.NoContent); 
    } 

    // POST: api/People 
    [ResponseType(typeof(Person))] 
    public IHttpActionResult PostPerson(Person person) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     db.People.Add(person); 
     db.SaveChanges(); 

     return CreatedAtRoute("DefaultApi", new { id = person.Id }, person); 
    } 

    // DELETE: api/People/5 
    [ResponseType(typeof(Person))] 
    public IHttpActionResult DeletePerson(int id) 
    { 
     Person person = db.People.Find(id); 
     if (person == null) 
     { 
      return NotFound(); 
     } 

     db.People.Remove(person); 
     db.SaveChanges(); 

     return Ok(person); 
    } 

    protected override void Dispose(bool disposing) 
    { 
     if (disposing) 
     { 
      db.Dispose(); 
     } 
     base.Dispose(disposing); 
    } 

    private bool PersonExists(int id) 
    { 
     return db.People.Count(e => e.Id == id) > 0; 
    } 
} 
+0

这是一个惯例 - 当该方法被称为Get或GetPeople时,它就是GET的HTTP动词;如果它是'PutPerson',它是'PUT' HTTP动词等。 –

回答

1

否!!它不是强制性的。你可以简单地写Get()而不是GetPerson(),Post()而不是PostPerson()等等。或者你也可以为你的方法命名,但你必须使用Accept Verb(http动词,如方法头部的get,post,put,delete等)属性。