ASP.NET Web API構建一個簡單的應用
阿新 • • 發佈:2018-11-26
使用ASP.NET Web API構建一個簡單的應用。
示例:使用ASP.NET Web API提供獲取使用者列表和使用者資訊介面。
1、在Models目錄下建立使用者資訊類(UserModel.cs)
/// <summary> /// 使用者資訊類 /// </summary> public class UserModel { /// <summary> /// 使用者ID /// </summary> public int ID { get; set; } /// <summary> /// 使用者名稱稱 /// </summary> public string Name { get; set; } /// <summary> /// 性別 /// </summary> public string Sex { get; set; } }
2、在Models目錄下建立使用者引數類(UserParam.cs)
/// <summary> /// 使用者引數類 /// </summary> public class UserParam { /// <summary> /// 使用者ID /// </summary> public int ID { get; set; } /// <summary> /// 使用者名稱稱 /// </summary> public string Name { get; set; } /// <summary> /// 性別 /// </summary> public string Sex { get; set; } }
3、建立API執行狀態編碼列舉(ApiStatusCode.cs)
/// <summary> /// API執行狀態編碼列舉 /// </summary> public enum ApiStatusCode { /// <summary> /// 引數缺失或無效 /// </summary> ParamInvalid = 1000, /// <summary> /// 操作成功 /// </summary> Success = 2000, /// <summary> /// 系統異常 /// </summary> SystemException = 5000, /// <summary> /// 操作失敗 /// </summary> Failed = 5500 }
4、在Models目錄下建立Api返回結果類(ApiResultModel.cs)
/// <summary>
/// Api返回結果類
/// </summary>
public class ApiResultModel
{
/// <summary>
/// 狀態碼
/// </summary>
public ApiStatusCode StatusCode { get; set; }
/// <summary>
/// 返回訊息描述
/// </summary>
public string Message { get; set; }
/// <summary>
/// 返回資料
/// </summary>
public object Data { get; set; }
}
5、在Controllers目錄下建立WebApi控制器基類(BaseApiController.cs),並編寫相關WebApi的公共處理方法。
/// <summary>
/// WebApi控制器基類
/// </summary>
public class BaseApiController : ApiController
{
/// <summary>
/// 獲取當前請求的Token值
/// </summary>
public static string GetRequestToken()
{
string token = HttpContext.Current.Request.Headers["Access-Token"];
return token;
}
/// <summary>
/// 生成新Token
/// </summary>
/// <returns></returns>
public static string CreateNewToken()
{
//TODO:生成新Token方法待完成
string token = "12345";
return token;
}
/// <summary>
/// 獲取POST請求Request中的引數
/// </summary>
public static string GetRequestParam()
{
using (StreamReader sr = new StreamReader(HttpContext.Current.Request.InputStream))
{
string reqParam = sr.ReadToEnd();
return reqParam;
}
}
/// <summary>
/// 獲取POST請求Request中的引數並反序列化為T物件
/// </summary>
public static T GetRequestParam<T>() where T : class,new()
{
using (StreamReader sr = new StreamReader(HttpContext.Current.Request.InputStream))
{
string reqParam = sr.ReadToEnd();
if (string.IsNullOrWhiteSpace(reqParam))
{
return default(T);
}
return JsonConvert.DeserializeObject<T>(reqParam);
}
}
/// <summary>
/// 將物件轉換為Json格式的HttpResponseMessage物件
/// </summary>
public static HttpResponseMessage ToResponseJson(ApiResultModel model)
{
string str = JsonConvert.SerializeObject(model);
var result = new HttpResponseMessage
{
Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json")
};
//生成新Token
string token = CreateNewToken();
//新增響應頭資訊
result.Headers.Add("Access-Control-Expose-Headers", "Access-Token");
result.Headers.Add("Access-Token", token);
return result;
}
}
6、在Controllers目錄下建立使用者控制器(UserController.cs),該控制器繼承BaseApiController基類,並編寫相關介面方法。
/// <summary>
/// 使用者控制器
/// </summary>
public class UserController : BaseApiController
{
/// <summary>
/// 查詢使用者列表
/// </summary>
[HttpPost]
public HttpResponseMessage QueryUserList()
{
ApiResultModel result = new ApiResultModel();
//獲取查詢引數
UserParam param = GetRequestParam<UserParam>();
if (param == null)
{
result.StatusCode = ApiStatusCode.ParamInvalid;
result.Message = "引數缺失或無效";
result.Data = null;
return ToResponseJson(result);
}
//獲取使用者資料列表
List<UserModel> userList = GetUserData();
//根據查詢引數,篩選資料
if (!String.IsNullOrEmpty(param.Name))
{
userList = userList.Where(a => a.Name == param.Name).ToList();
}
if (!String.IsNullOrEmpty(param.Sex))
{
userList = userList.Where(a => a.Sex == param.Sex).ToList();
}
//返回最終結果
result.StatusCode = ApiStatusCode.Success;
result.Message = "操作成功";
result.Data = userList;
return ToResponseJson(result);
}
/// <summary>
/// 查詢單個使用者
/// </summary>
[HttpPost]
public HttpResponseMessage QueryUserInfo()
{
ApiResultModel result = new ApiResultModel();
//獲取查詢引數
UserParam param = GetRequestParam<UserParam>();
if (param == null)
{
result.StatusCode = ApiStatusCode.ParamInvalid;
result.Message = "引數缺失或無效";
result.Data = null;
return ToResponseJson(result);
}
if (param.ID <= 0)
{
result.StatusCode = ApiStatusCode.ParamInvalid;
result.Message = "無效的ID值引數";
result.Data = null;
return ToResponseJson(result);
}
//獲取使用者資料列表
List<UserModel> userList = GetUserData();
//根據查詢引數,篩選資料
UserModel user = userList.FirstOrDefault(a => a.ID == param.ID);
//返回最終結果
result.StatusCode = ApiStatusCode.Success;
result.Message = "操作成功";
result.Data = user;
return ToResponseJson(result);
}
/// <summary>
/// 獲取使用者資料列表
/// </summary>
private List<UserModel> GetUserData()
{
List<UserModel> result = new List<UserModel>();
result.Add(new UserModel() { ID = 1, Name = "張三", Sex = "男" });
result.Add(new UserModel() { ID = 2, Name = "李四", Sex = "女" });
result.Add(new UserModel() { ID = 3, Name = "王五", Sex = "男" });
result.Add(new UserModel() { ID = 4, Name = "孫六", Sex = "女" });
return result;
}
}
7、執行測試
這裡測試第一個介面方法(查詢使用者列表),使用測試工具:Postman,如下圖。
請求引數:
{
"Name": "",
"Sex": "男"
}
響應結果:
{
"StatusCode": 2000,
"Message": "操作成功",
"Data": [{
"ID": 1,
"Name": "張三",
"Sex": "男"
},
{
"ID": 3,
"Name": "王五",
"Sex": "男"
}
]
}