Post发送数据数据到api
为了模仿数据库 我们在bookcontroller.cs中添加一个静态列表
public static List<Book> books = new List<Book>();
添加静态列表前先添加一个Book实体类
public class Book { public int ID { set; get; } public string Name { set; get; } }
然后我们添加一个 Action 用来处理HttpPost请求,下面的代码是带有用户页面跳转功能,不需要可以删了。
public HttpResponseMessage Post(Book book) { books.Add(book); //成功添加后 跳转到详情页 var local = new Uri(this.Request.RequestUri, "book/" + book.ID); var response = this.Request.CreateResponse(HttpStatusCode.Created); response.Headers.Location = local; return response; }
接下来就是运行这个API接口
打开PostMan工具模拟客户端向服务器端发送数据,以表单的形式添加一个book
这里的数据是我们刚刚从客户端获取的,要是在真正链接数据库,数据就会存到数据库,像手机APP注册成功后,数据库就会添加记录
Get获取数据到客户端
再添加一个 Action 用来处理HttpPost请求
public string Get(int id) { var book = books.FirstOrDefault(m=>m.ID==id); return book.Name; }
在有数据的情况,用PostMan工具向api接口获取数据。这里查询列表的ID=3,返回的值为D喜羊羊
现在我们如果访问的id不存在的数据则会报错,我们希望返回一个404的状态码 为了实现这个,WEB API提供一个HttpResponseException类,HttpStatusCode.NotFound表示页面不存在
public string Get(int id) { var book = books.FirstOrDefault(m => m.ID == id); if (book == null) { throw new HttpResponseException(HttpStatusCode.NotFound); } return book.Name; }
访问不存在的数据
{ "Message": "出现错误。", "ExceptionMessage": "未将对象引用设置到对象的实例。", "ExceptionType": "System.NullReferenceException", "StackTrace": " 在 APIDemo.Controllers.BookController.Get(Int32 id) 位置 C:\\Users\\Administrator\\Desktop\\C#\\APIDemo\\APIDemo\\Controllers\\BookController.cs:行号 30\r\n 在 lambda_method(Closure , Object , Object[] )\r\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass6_2.<GetExecutor>b__2(Object instance, Object[] methodParameters)\r\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)\r\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)\r\n--- 引发异常的上一位置中堆栈跟踪的末尾 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n 在 System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__1.MoveNext()\r\n--- 引发异常的上一位置中堆栈跟踪的末尾 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n 在 System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__5.MoveNext()\r\n--- 引发异常的上一位置中堆栈跟踪的末尾 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__15.MoveNext()" }
访问没有数据,被抛出异常了
Delete
DELETE 的方法发送到 api/values/5,public void Delete(int id) 其中这个id 是直接从url地址中获取
Put
public void Put(int id, [FromBody]string value),其中id从url获取 value从表单中获取,有key值的放在在id,没有值的放在value。