ASP.NET MVC 从入门到放弃(Day29)-MVC 实作一个web api

在前一天我有提到如何将Web Api 加入 Swagger
今天就来实作一个会员查询资料的POST 方法的 Web Api

1.预想Json格式呼叫(传入)的方法为

  {
     "MemberId": "1111",	
     "MemberName": "11111",
   }

2.建立会员Model模板

public class Member
{
   /// <summary>
   /// 会员编号
   /// </summary>
   [Display(Name = "会员编号")]
   [StringLength(10, ErrorMessage = "{0}的长度至少必须为{2}的字元。", MinimumLength = 0)]
   public string MemberId { get; set; }


    /// <summary>
    /// 会员姓名
    /// </summary>
    [Display(Name = "会员姓名")]
    [StringLength(10, ErrorMessage = "{0}的长度至少必须为{2}的字元。", MinimumLength = 0)]
    public string MemberName { get; set; }

}

3.预想Json格式呼叫(传出)的方法为

{
    "code": "S001",
    "message": "查询成功",
    "stauts": "成功",
    "data": [
        {
            "memberId": "1111",
            "memberName": "Yaowen"
        }
    ]
}

4.建立传出Model模板

public class Result2<T>
{
   public string Code { get; set; }
   public string Message { get; set; }
   public string Stauts { get; set; }
   public List<T> Data { get; set; } = new List<T>();
}

5.Controller 开始写逻辑

 #region 查询会员资料
/// <summary>
/// 查询会员资料
/// </summary>
/// <response code="S001">查询成功</response>
/// <response code="E001">查无资料</response>
/// <response code="E002">不在效期内</response>
/// <response code="E003">未知错误</response>
///  <remarks>
///   {
///        "MemberId": "1111",	
///        "MemberName": "11111",
///     }
///  </remarks>
[HttpPost("GetMember")]
public Result2<MemberData> GetMember([FromBody] Member member)
{

            

   var Config = new Config();
   Config.connectionString = _config.GetValue<string>("connectionString");


   Result2<MemberData> result = new Result2<MemberData>();




   if (String.IsNullOrEmpty(member.MemberId) && String.IsNullOrEmpty(member.MemberName))
   {
        result.Code = "E001";
        result.Message = "查无资料";
        result.Stauts = "失败";
        return result;
    }

    try
    {
       using (var conn = new MySqlConnection(Config.connectionString))
       {

          conn.Open();

          using (var command = conn.CreateCommand())
          {
              command.CommandText = "SELECT MemberId,MemberName FROM Member WHERE 1 = 1 ";
              if (!String.IsNullOrEmpty(member.MemberId))
              {
                 command.CommandText += " And memberid like @MmeberId ";
                 command.Parameters.AddWithValue("@MmeberId", "%" + member.MemberId);
              }

              if (!String.IsNullOrEmpty(member.MemberName))
              {
                 command.CommandText += " And MemberName like @MemberName ";
                 command.Parameters.AddWithValue("@MemberName", "%" + member.MemberName);
              }


             using (var reader = command.ExecuteReader())
             {
                if (reader.HasRows)
                {
                   result.Code = "S001";
                   result.Message = "查询成功";
                   result.Stauts = "成功";

                   while (reader.Read())
                   {
             
                       result.Data.Add(new MemberData() { 
                                    
                      MemberId = (reader.IsDBNull(reader.GetOrdinal("MemberId"))) ? "" : (string)reader["MemberId"],
                      MemberName = (reader.IsDBNull(reader.GetOrdinal("MemberName"))) ? "" : (string)reader["MemberName"]
                      });
   
                    }

                              


                  return result;
               }
               else
               {
                  result.Code = "E001";
                  result.Message = "查无资料";
                  result.Stauts = "失败";
                 return result;
                 }
         }
      }


}
            }
            catch (Exception ex)
            {
                result.Code = "E003";
                result.Message = ex.Message;
                result.Stauts = "未知错误";
                return result;
            }
        }

        #endregion

注解:Controller 可以另外拆开把逻辑的部分放在Model底下(正常资料库存取部分是要放在Model底下),但这边快速讲解流程故逻辑先写在Controller底下

6.使用PostMan进行测试
https://ithelp.ithome.com.tw/upload/images/20210908/20140001zRvaBnaxiY.png

7.或者可以使用Swagger进行测试
https://ithelp.ithome.com.tw/upload/images/20210908/20140001pTscL9QvVI.png


<<:  集各领域专家修复的两大世界遗产

>>:  Day-20 CheckBox

资料传输格式 JSON

在没有网路的年代,人们获取资讯的来源可能是报章杂志、广播电视等等,报章杂志的排版需要符合出版业的要求...

99 - 顺手工具的最好

到这里,这趟旅程也已经接近尾声了,但是好用的工具却不只有这些,在这些工具之外还有许多的遗珠之憾,有些...

Day8 GraphQL 介绍、在WordPress 上安装 WPGraphQL plugin

我们的系统架构很单纯,分为托管在 Vercel 上的 Next.js 前端,以及托管在 BlueHo...

Day50. 范例:十二生肖

本文同步更新於blog 情境:玉皇大帝要举办渡河比赛,动物选手各显神通。 <?php na...

C# 入门之类(Class)

在前面介绍 C# 代码结构的时候,我们有提高过一下类(class),下面我们来看一下,如何定义一个类...