知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運(yùn)營的高效,讓網(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);
}
相關(guān)案例查看更多
相關(guān)閱讀
- 開發(fā)框架
- 云南網(wǎng)站建設(shè)案例
- 昆明小程序開發(fā)
- 云南省城鄉(xiāng)建設(shè)廳網(wǎng)站
- 云南做百度小程序的公司
- 云南建站公司
- 網(wǎng)絡(luò)公司聯(lián)系方式
- 云南小程序開發(fā)公司哪家好
- 云南做網(wǎng)站
- uniapp開發(fā)小程序
- 昆明網(wǎng)站設(shè)計
- 小程序的開發(fā)公司
- 小程序公司
- 云南小程序開發(fā)公司推薦
- 模版信息
- 小程序開發(fā)平臺前十名
- 云南網(wǎng)站建設(shè)列表網(wǎng)
- 云南網(wǎng)站建設(shè)專家
- 云南網(wǎng)站建設(shè)服務(wù)公司
- 公眾號模板消息
- 排名
- 小程序開發(fā)公司
- 小程序技術(shù)
- 迪慶小程序開發(fā)
- 高端網(wǎng)站建設(shè)公司
- 網(wǎng)站建設(shè)哪家強(qiáng)
- 生成海報
- 云南小程序開發(fā)首選品牌
- 網(wǎng)站建設(shè)快速優(yōu)化
- 云南軟件公司