欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

vs2017開發(fā)web api 應(yīng)用學(xué)習(xí)筆記 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!

您當(dāng)前位置>首頁 » 新聞資訊 » 網(wǎng)站建設(shè) >

vs2017開發(fā)web api 應(yīng)用學(xué)習(xí)筆記

發(fā)表時間:2018-12-7

發(fā)布人:葵宇科技

瀏覽次數(shù):67

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

一、新建web api 項目

在vs2017中選擇新建項目-選擇asp.net web 應(yīng)用程序,在如下圖示項目選擇窗口中,選擇“空“項目,勾選 Web Api,確定后系統(tǒng)自動創(chuàng)建空的Web Api項目;

二、設(shè)置路由

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

三、在web api中啟用會話支持

web api默認(rèn)情況并不支持會話,通過 HttpContext.Current.Session訪問相關(guān)會話對象時,總是為null,需要使用以下方法啟用會話支持:

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

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

四、對接口啟用訪問認(rèn)證

新建RequestAuthorizeAttribute類,該類繼承至AuthorizeAttribute,重寫父類的OnAuthorization方法;在需要驗證的接口方法中使用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接口參數(shù)

1、接口調(diào)用方式:webap有put、get、delete、post等集中調(diào)用方式,在未顯示說明接口調(diào)用方式屬性時,對Get開始的方法默認(rèn)為采用get方式(post、put、delete類似),若接口方法默認(rèn)不符合約定,則需要使用屬性明確說明;

2、對get方法可適用[Fromuri] 參數(shù),說明接口參數(shù)來自于url,而post、put、delete方法可采用[frombody]屬性將來自于http數(shù)據(jù)部分的數(shù)據(jù)序列化為指定對的對象的類型,當(dāng)不明確來自于數(shù)據(jù)部分的對象類型,對接口參數(shù)采用dynamic類型是不錯的選擇,示例如下:

前端提交的數(shù)據(jù)內(nèi)容:

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

后端數(shù)據(jù)接口:

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

需要注意的是:若需要dynamic對象直接序列化為對象,需要在前端提交數(shù)據(jù)的時候,將數(shù)據(jù)用JSON.stringfy(data)序列化為json對象,否則后端得到的是層層嵌套的對象;

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

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

同上:明確采用json格式進(jìn)行數(shù)據(jù)傳遞時,需要用JSON.stringfy(data)序列化為json對象

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

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

六、利用webApi上傳文件

前端需要content-type信息為:

"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);
            }