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。