vs2017開發web api 應用學習筆記 - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 網站建設 >

vs2017開發web api 應用學習筆記

發表時(shí)間:2018-12-7

發布人(rén):融晨科技

浏覽次數:67

參考網址:https://www.cnblogs.com/landeanfen/p/5337072.html,該文章對接口屬性以(yǐ)及接口參數的(de)傳遞有比較詳細的(de)描述。

一、新建web api 項目

在(zài)vs2017中選擇新建項目-選擇asp.net web 應用程序,在(zài)如下圖示項目選擇窗口中,選擇“空“項目,勾選 Web Api,确定後系統自動創建空的(de)Web Api項目;

二、設置路由

默認情況下創建的(de)Web Api 項目采用"api/{controller}/{id}" 的(de)方式映射訪問路由,即:api爲(wéi / wèi)默認路徑前綴,controller對應爲(wéi / wèi)控制器名稱中去掉controller中的(de)部分,而(ér)接口名稱采用get前綴的(de)方法,即訪問接口的(de)method采用get,其它的(de)依次類推,訪問接口非常的(de)機械且難以(yǐ)理解,可在(zài)控制器中使用RoutePrefix屬性重新定義控制對應的(de)訪問路徑名稱,在(zài)方法中使用Route屬性映射方法的(de)訪問路徑,使用HttpGet等屬性映射方法的(de)訪問method,這(zhè)樣可提高整個(gè)應用的(de)靈活性和(hé / huò)規範性;

三、在(zài)web api中啓用會話支持

web api默認情況并不(bù)支持會話,通過 HttpContext.Current.Session訪問相關會話對象時(shí),總是(shì)爲(wéi / wèi)null,需要(yào / yāo)使用以(yǐ)下方法啓用會話支持:

重寫global.asax對象對的(de) Init() 方法,示例代碼如下:

 public override void Init()
        {
            //=======================啓用會話=============================
            this.PostAuthenticateRequest += (sender, e) => HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
            base.Init();
        }

四、對接口啓用訪問認證

新建RequestAuthorizeAttribute類,該類繼承至AuthorizeAttribute,重寫父類的(de)OnAuthorization方法;在(zài)需要(yào / yāo)驗證的(de)接口方法中使用RequestAuthorizeAttribute屬性,RequestAuthorizeAttribute代碼如下:

 public class RequestAuthorizeAttribute : AuthorizeAttribute
    {
        public override void>        [HttpPut]
        [RequestAuthorize]
        [Route("update/{id}")]
        public LoginToken update(string id,[FromBody] Logins login)
        {
            System.Diagnostics.Debug.WriteLine(login);

            LoginToken token = new LoginToken { token = "1111111111", userId = "test", userName = "test" };
            return token;
        }

五、webApi接口參數

1、接口調用方式:webap有put、get、delete、post等集中調用方式,在(zài)未顯示說(shuō)明接口調用方式屬性時(shí),對Get開始的(de)方法默認爲(wéi / wèi)采用get方式(post、put、delete類似),若接口方法默認不(bù)符合約定,則需要(yào / yāo)使用屬性明确說(shuō)明;

2、對get方法可适用[Fromuri] 參數,說(shuō)明接口參數來(lái)自于(yú)url,而(ér)post、put、delete方法可采用[frombody]屬性将來(lái)自于(yú)http數據部分的(de)數據序列化爲(wéi / wèi)指定對的(de)對象的(de)類型,當不(bù)明确來(lái)自于(yú)數據部分的(de)對象類型,對接口參數采用dynamic類型是(shì)不(bù)錯的(de)選擇,示例如下:

前端提交的(de)數據内容:

   $.ajax({
        type: "post",
        url: "http://localhost:27221/api/Charging/SaveData",
        contentType: 'application/json',
        data: JSON.stringify({ NAME: "Jim",DES:"備注" }),
        success: function (data, status) {}
    });

後端數據接口:

        [HttpPost]
        public object SaveData(dynamic obj)
        {
            var strName = Convert.ToString(obj.NAME);
            return strName;
        }

需要(yào / yāo)注意的(de)是(shì):若需要(yào / yāo)dynamic對象直接序列化爲(wéi / wèi)對象,需要(yào / yāo)在(zài)前端提交數據的(de)時(shí)候,将數據用JSON.stringfy(data)序列化爲(wéi / wèi)json對象,否則後端得到(dào)的(de)是(shì)層層嵌套的(de)對象;

3、接口采用對象,如下示例接口:

[HttpPost]
        public bool SaveData(TB_CHARGING oData)
        {
            return true;
        }

同上(shàng):明确采用json格式進行數據傳遞時(shí),需要(yào / yāo)用JSON.stringfy(data)序列化爲(wéi / wèi)json對象

對接口傳遞數組對象時(shí),可采用List<ObjectType>的(de)類型傳遞接口參數,示例如下:

 [HttpPost]
        public bool SaveData(List<TB_CHARGING> lstCharging)
        {
            return true;
        }

六、利用webApi上(shàng)傳文件

前端需要(yào / yāo)content-type信息爲(wéi / wèi):

"Content-Type":"multipart/form-data"

後端代碼如下示例:

HttpRequest httpRequest = HttpContext.Current.Request;
            foreach (string file in httpRequest.Files)
            {
                System.Diagnostics.Debug.WriteLine(httpRequest.Files[file].FileName);
                System.IO.Stream inStream = httpRequest.Files[file].InputStream;
                byte[] buffer = new byte[inStream.Length];
                inStream.Read(buffer, 0, buffer.Length);
                
                var filePath = HttpContext.Current.Server.MapPath("~/" + httpRequest.Files[file].FileName);
                httpRequest.Files[file].SaveAs(filePath);
            }

相關案例查看更多