1. 程式人生 > >ASP.NET Web API構建一個簡單的應用

ASP.NET Web API構建一個簡單的應用

使用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": "男"
		}
	]
}