zoukankan      html  css  js  c++  java
  • 聊聊 .net Core webAPi 的Get和POST 相关(1)

    上篇文章,我们试着调用API,成功返回值,今天接下来看看代码是怎么构成的

     1 [Route("api/[controller]")]
     2     [ApiController]
     3     public class TodoController : ControllerBase
     4     {
     5         private readonly TodoContext _context;
     6 
     7         public TodoController(TodoContext context)
     8         {
     9             _context = context;
    10 
    11             if (_context.TodoItems.Count() == 0)
    12             {
    13                 // Create a new TodoItem if collection is empty,
    14                 // which means you can't delete all TodoItems.
    15                 _context.TodoItems.Add(new TodoItem { Name = "Item1" });
    16                 _context.SaveChanges();
    17             }
    18         }
    19 
    20       
    21         // GET: api/Todo
    22         [HttpGet]
    23         public ActionResult<IEnumerable<TodoItem>> GetDataList()
    24         {
    25             return  _context.TodoItems.ToList();
    26         }
    27         [HttpPost]
    28         public IActionResult Create( TodoItem item)
    29         {
    30             if (item == null)
    31             {
    32                 return BadRequest();
    33             }
    34 
    35             _context.TodoItems.Add(item);
    36             _context.SaveChanges();
    37 
    38             return CreatedAtRoute("GetTodo", new { id = item.Id }, item);
    39         }
    40         [HttpPut("{id}")]
    41         public IActionResult Update(long id, [FromBody] TodoItem item)
    42         {
    43             if (item == null || item.Id != id)
    44             {
    45                 return BadRequest();
    46             }
    47 
    48             var todo = _context.TodoItems.FirstOrDefault(t => t.Id == id);
    49             if (todo == null)
    50             {
    51                 return NotFound();
    52             }
    53 
    54             todo.IsComplete = item.IsComplete;
    55             todo.Name = item.Name;
    56 
    57             _context.TodoItems.Update(todo);
    58             _context.SaveChanges();
    59             return new NoContentResult();
    60         }
    61         [HttpDelete("{id}")]
    62         public IActionResult Delete(long id)
    63         {
    64             var todo = _context.TodoItems.FirstOrDefault(t => t.Id == id);
    65             if (todo == null)
    66             {
    67                 return NotFound();
    68             }
    69 
    70             _context.TodoItems.Remove(todo);
    71             _context.SaveChanges();
    72             return new NoContentResult();
    73         }
    74         // GET: api/Todo/5
    75         [HttpGet("{id}")]
    76         public async Task<ActionResult<TodoItem>> GetTodoItem(long id)
    77         {
    78             var todoItem = await _context.TodoItems.FindAsync(id);
    79 
    80             if (todoItem == null)
    81             {
    82                 return NotFound();
    83             }
    84 
    85             return todoItem;
    86         }
    87     }
    View Code

    首先我们的方法都写在Controller里面,这个Controller必须继承基类 ControllerBase

    每个暴露给外面的接口方法都是public ,为了表明方法是post 或Get, 在方法的上面标注[HttpPost]或[HttpGet],这是一种约定,这是一种规范。

    在这里有两个注意点.如果方法不标注,则Get和Post方法都支持,但是同时只能有一个对外开放的方法不标注

    下面我们来验证下结论,方法不标注用Get方法调用

    看,虽然HTTPGet注释了,但是方法还是成功的被调用

    同样的 post 方法也能成功调用

    为啥只能有一个API方法可以不标注,如果本来就已经标注了Get方法,不标注的方法还可以是Get方法吗?如果我们要有2个以上get方法是否可以,带着这些疑问,我们下篇文章再来验证。

  • 相关阅读:
    SVG PATH d参数的 ace
    如果你想动态创建一个iframe
    canvas构建一个平面直角坐标系
    JavaScript版几种常见排序算法
    【分享】 Stip,让表单验证轻松愉快。
    【分享】javascript合并混淆压缩
    【分享】页面提示插件更新
    nodejs 的 session 简单实现
    页面模块之间的通信依赖解决方案
    在平面旋转一个点
  • 原文地址:https://www.cnblogs.com/NotLaterforever/p/11504775.html
Copyright © 2011-2022 走看看