WEB API中put post get delete的用法


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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM