脚手架自动WebApi控制器生成

时间:2016-11-19 20:21:40

标签: c# .net asp.net-web-api asp.net-web-api2

我正在学习Web Api,我有点困惑。

当我为Person类创建控制器时,它如何定义哪个方法是GETPOSTDELETE?它是定义它的方法前缀吗?它是一种约定,将方法的前缀设置为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;
    }
}

1 个答案:

答案 0 :(得分:1)

没有!!它不是强制性的。你可以简单地写Get()而不是GetPerson(),Post()而不是PostPerson()等。或者你也可以命名你的方法你想要的任何名称,但你必须使用Accept Verb(http动词这样作为get,post,put,delete等属性在方法的头部。