• WebAPI项目搭建及其发布测试


    目录

    1.创建项目

    2.配置

    3.发布

    4.测试页面


    1.创建项目

    (1)创建ASP.NET Web应用程式,如下图:

    (2)选择Empty,勾选Web API,点击确定创建,如下图:

    (3)创建完成,如下图:

    (4)添加文件夹及类,如下图:      

      

     说明:BLL(存放数据库相关的类),TestController(接口类),Models(存放Models类),MPage(存放啟動頁面,沒有任何功能)

    2.配置

    (1)Web.config配置文件,配置数据库连接及跨域,代码如下:

    1. <add key="DBConnectionString1" value="Data Source=1.3.1.1;Initial Catalog=total;Persist Security Info=True;User ID=SC;Password=SCQSMPTD;MultipleActiveResultSets=true" />
    2. <add key="DBConnectionString2" value="Data Source=1.3.1.3;Initial Catalog=SMT_PCP;Persist Security Info=True;User ID=micro;Password=micro;MultipleActiveResultSets=true" />
    3. <add key="OraConn"
    4. value="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=1.3.1.22)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PACK)));User Id=e_re;Password=yhong;"/>
    5. <add name="Access-Control-Allow-Origin" value="*" />
    6. <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    7. <add name="Access-Control-Allow-Headers" value="Content-Type,X-Requested-With,token,staffid,timestamp,nonce,signKey,signature" />
    8. <add name="Access-Control-Request-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />

     (2)在Global.asax文件中添加,下面代码:

    1. protected void Application_BeginRequest(object sender, EventArgs e)
    2. {
    3. var res = HttpContext.Current.Response;
    4. var req = HttpContext.Current.Request;
    5. //自定义header时进行处理
    6. if (req.HttpMethod == "OPTIONS")
    7. {
    8. res.AppendHeader("Access-Control-Allow-Headers", "Content-Type, X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Date, X-Api-Version, X-File-Name,Token,Cookie");
    9. res.AppendHeader("Access-Control-Allow-Methods", "POST,GET,PUT,PATCH,DELETE,OPTIONS");
    10. res.StatusCode = 200;
    11. res.End();
    12. }
    13. }

    (3)啟動頁面:Hello.aspx

    1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Hello.aspx.cs" Inherits="WebAPI.MPage.Hello" %>
    2. "http://www.w3.org/1999/xhtml">
    3. "server">
    4. "Content-Type" content="text/html; charset=utf-8"/>
    5. "form1" runat="server">
    6. 這個界面只是一個啟動頁面,沒有任何功能
  • (4)webapi设置默认返回json格式 ,WebApiConfig文件下Register方法下,添加代码:

    1. GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
    2. //默认返回 json
    3. GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(
    4. new QueryStringMapping("datatype", "json", "application/json"));
    5. // 解决json序列化时的循环引用问题
    6. config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;

    (5)BLL文件夹下创建一个SQLHelper类,用于连接数据库,代码:

    1. using Oracle.ManagedDataAccess.Client;
    2. using System;
    3. using System.Collections.Generic;
    4. using System.Configuration;
    5. using System.Data;
    6. using System.Data.SqlClient;
    7. using System.Linq;
    8. using System.Text;
    9. using System.Web;
    10. namespace WebAPI.BLL
    11. {
    12. ///
    13. /// 鏈接類別
    14. ///
    15. public enum DBConnList
    16. {
    17. DBConnStr1 = 0,
    18. DBConnStr2 = 1,
    19. QracleConnS = 2,
    20. }
    21. public static class SQLHelper
    22. {
    23. //数据库1
    24. public static string DBConnectionString1 = ConfigurationManager.AppSettings["DBConnectionString1"];
    25. //数据库2
    26. public static string DBConnectionString2 = ConfigurationManager.AppSettings["DBConnectionString2"];
    27. //Qracle数据库操作
    28. public static string QracleSring = ConfigurationManager.AppSettings["OraConn"];
    29. ///
    30. /// 獲得數據庫鏈接語句
    31. ///
    32. /// 請求數據庫類別
    33. ///
    34. public static string GetConnectStr(DBConnList DBConnIndex)
    35. {
    36. var connstr = "";
    37. if (DBConnIndex == DBConnList.DBConnStr1)
    38. {
    39. connstr = DBConnectionString1;
    40. }
    41. else if (DBConnIndex == DBConnList.DBConnStr2)
    42. {
    43. connstr = DBConnectionString2;
    44. }
    45. else if (DBConnIndex == DBConnList.QracleConnS)
    46. {
    47. connstr = QracleSring;
    48. }
    49. return connstr;
    50. }
    51. //SQL 数据库操作
    52. #region
    53. ///
    54. /// 增刪改查,不涉及事物
    55. ///
    56. ///
    57. /// 請求數據庫類別
    58. ///
    59. public static int ExecuteSQL(string sql, DBConnList DBConnIndex)
    60. {
    61. var connstr = GetConnectStr(DBConnIndex);
    62. SqlConnection conn = new SqlConnection(connstr);
    63. SqlCommand cmd = new SqlCommand(sql, conn);
    64. conn.Open();
    65. int result = cmd.ExecuteNonQuery();
    66. conn.Close();
    67. return result;
    68. }
    69. ///
    70. /// 执行带SqlParameter的SQL语句
    71. ///
    72. ///
    73. /// 請求數據庫類別
    74. /// 參數
    75. ///
    76. public static int ExecuteSQLAndSP(string sql, DBConnList DBConnIndex, List sp)
    77. {
    78. var connstr = GetConnectStr(DBConnIndex);
    79. SqlConnection connection = new SqlConnection(connstr);
    80. try
    81. {
    82. connection.Open();
    83. SqlCommand cmd = new SqlCommand(sql, connection);
    84. foreach (SqlParameter cur_sp in sp)
    85. {
    86. if (cur_sp.Value != null)
    87. {
    88. cmd.Parameters.Add(cur_sp);
    89. }
    90. }
    91. return cmd.ExecuteNonQuery();
    92. }
    93. finally
    94. {
    95. connection.Close();
    96. }
    97. }
    98. ///
    99. /// 執行多條SQL語句,實現數據庫事物
    100. ///
    101. /// 多條SQL語句
    102. /// 請求數據庫類別
    103. /// 1 表示執行成功;2 表示出現錯誤了。
    104. public static void ExecuteSQLTran(List<string> SQLStringList, DBConnList DBConnIndex, ref int result)
    105. {
    106. var connstr = GetConnectStr(DBConnIndex);
    107. using (SqlConnection conn = new SqlConnection(connstr))
    108. {
    109. conn.Open();
    110. SqlCommand cmd = new SqlCommand();
    111. cmd.Connection = conn;
    112. SqlTransaction tx = conn.BeginTransaction();
    113. cmd.Transaction = tx;
    114. int curIndex = 0;
    115. try
    116. {
    117. for (int n = 0; n < SQLStringList.Count; n++)
    118. {
    119. string strsql = SQLStringList[n].ToString();
    120. if (strsql.Trim().Length > 1)
    121. {
    122. cmd.CommandText = strsql;
    123. cmd.ExecuteNonQuery();
    124. curIndex = curIndex + 1;
    125. }
    126. }
    127. tx.Commit();
    128. result = 1;
    129. }
    130. catch (SqlException ex)
    131. {
    132. result = 2;
    133. Add_Log("ExecuteSqlTran:" + SQLStringList[curIndex] + " \r\n Error:" + ex.Message);
    134. tx.Rollback();
    135. //throw new Exception(E.Message);
    136. }
    137. }
    138. }
    139. ///
    140. /// 查詢
    141. ///
    142. /// 需要執行的SQL語句
    143. /// 請求數據庫類別
    144. ///
    145. public static DataTable SearchSQL(string sql, DBConnList DBConnIndex)
    146. {
    147. var connstr = GetConnectStr(DBConnIndex);
    148. DataSet ds = new DataSet();
    149. SqlDataAdapter sda = new SqlDataAdapter(sql, connstr);
    150. sda.Fill(ds);
    151. return ds.Tables[0];
    152. }
    153. public static DataTable Only_Table1(string exec, DBConnList DBConnIndex)
    154. {
    155. var connstr = GetConnectStr(DBConnIndex);
    156. System.Data.DataTable dt_jdl = new DataTable();
    157. try
    158. {
    159. using (SqlConnection con = new SqlConnection(connstr))
    160. {
    161. if (con.State == ConnectionState.Closed)
    162. {
    163. con.Open();
    164. } if (con.State == ConnectionState.Open || con.State == ConnectionState.Connecting)
    165. {
    166. SqlDataAdapter sda2 = new SqlDataAdapter(exec, con);//全部通過寫存儲過程即可
    167. DataSet ds2 = new DataSet();
    168. sda2.Fill(ds2, "cxq");
    169. dt_jdl = ds2.Tables["cxq"];
    170. sda2.Dispose();
    171. ds2.Dispose();
    172. }
    173. con.Close();
    174. }
    175. return dt_jdl;
    176. }
    177. catch (Exception EX)
    178. {
    179. return null;
    180. }
    181. }
    182. ///
    183. /// 增加日志
    184. ///
    185. ///
    186. public static void Add_Log(string msg)
    187. {
    188. //msg = msg.Replace("'", "");
    189. //StringBuilder sb = new StringBuilder();
    190. //sb.AppendLine("Insert into SimpHomeDB.dbo.SYS_LOG (msg)");
    191. //sb.AppendLine("Values(N'[SimploScreenAPI]" + msg + "')");
    192. //ExecuteSQL(sb.ToString(), DBConnList.DBConnStrTE);
    193. }
    194. #endregion
    195. //Qracle数据库操作
    196. #region
    197. ///
    198. /// 执行SQL语句,返回DataTable;只用来执行查询结果比较少的情况
    199. ///
    200. ///
    201. ///
    202. ///
    203. ///
    204. public static DataTable QracleExecuteDataTableSQL(string sql, DBConnList DBConnIndex,params OracleParameter[] parameters)
    205. {
    206. var connStr = GetConnectStr(DBConnIndex);
    207. using (OracleConnection conn = new OracleConnection(connStr))
    208. {
    209. conn.Open();
    210. using (OracleCommand cmd = conn.CreateCommand())
    211. {
    212. cmd.CommandText = sql;
    213. cmd.Parameters.AddRange(parameters);
    214. OracleDataAdapter adapter = new OracleDataAdapter(cmd);
    215. DataTable datatable = new DataTable();
    216. adapter.Fill(datatable);
    217. return datatable;
    218. }
    219. }
    220. }
    221. ///
    222. /// 执行SQl语句(增、删、改)
    223. ///
    224. /// 要执行的SQl语句
    225. ///
    226. public static bool Qracle_EXCUTE(string sql, DBConnList DBConnIndex)
    227. {
    228. var connStr = GetConnectStr(DBConnIndex);
    229. try
    230. {
    231. OracleConnection connect = new OracleConnection(connStr);
    232. OracleCommand cmd = new OracleCommand();
    233. cmd.Connection = connect;
    234. cmd.CommandText = sql;
    235. connect.Open();
    236. cmd.ExecuteNonQuery();
    237. connect.Close();
    238. return true;
    239. }
    240. catch (Exception ex)
    241. {
    242. throw new Exception(ex.Message);
    243. }
    244. }
    245. #endregion
    246. }
    247. }

    (6)Models文件下的类,例SysResponse类:

    1. ///
    2. /// 返回信息
    3. ///
    4. public class SysResponse
    5. {
    6. ///
    7. /// 状态码
    8. ///
    9. public string Code { get; set; }
    10. ///
    11. /// 描述信息
    12. ///
    13. public string Message { get; set; }
    14. ///
    15. /// 数据
    16. ///
    17. public object Data { get; set; }
    18. }

    Common类

    1. public class Common
    2. {
    3. ///
    4. /// 轉化成Json
    5. ///
    6. /// 待轉換對象
    7. /// 轉換結果/returns>
    8. public static HttpResponseMessage ToJson(Object obj)
    9. {
    10. String str;
    11. if (obj is String || obj is Char)
    12. {
    13. str = obj.ToString();
    14. }
    15. else
    16. {
    17. JavaScriptSerializer serializer = new JavaScriptSerializer();
    18. str = serializer.Serialize(obj);
    19. }
    20. HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") };
    21. return result;
    22. }
    23. }

    (7)接口类TestController 

    1. public class TestController : ApiController
    2. {
    3. [HttpGet]
    4. public HttpResponseMessage HelloOne(string Line)
    5. {
    6. SysResponse res = new SysResponse();
    7. try
    8. {
    9. //sql数据库
    10. var emp_dt = SQLHelper.SearchSQL("select * from pcp where Line = '" + Line + "'", DBConnList.DBConnStr1);
    11. //Qracle数据库
    12. //var emp_dt = SQLHelper.QracleExecuteDataTableSQL("select * from (select * from scqhp.cell_sort_info_by_customer) where ROWNUM<=10 ORDER BY ROWNUM asc", DBConnList.QracleConnS);
    13. //var GoodsNo = emp_dt.Rows[0]["CELL_SN"].ToString();
    14. var GoodsNo = emp_dt.Rows[0]["P_N"].ToString();
    15. res.Code = "01";
    16. res.Message = GoodsNo;
    17. res.Data = "001";
    18. }
    19. catch (Exception ex)
    20. {
    21. res.Code = "02";
    22. res.Message = "調用失敗Hello,Exception:" + ex.Message + Line;
    23. res.Data = "002";
    24. }
    25. return Common.ToJson(res);
    26. }
    27. }

    说明:其中  [HttpGet]可以按照需求更改为  [HttpPost]  [HttpPut]  [HttpDelete]

    3.发布

    写好的接口需要发布到服务器或者本机的IIS进行测试,发布与发布网页一样

    4.测试页面

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1">
    6. <script src="jquery-1.10.2.min.js">script>
    7. <style>
    8. style>
    9. <title>webapi测试title>
    10. head>
    11. <body>
    12. <div id="body">
    13. <section>
    14. <br />
    15. <br />
    16. <h2>查询物料h2>
    17. Line:<input id="line" type="text" value="PZ01"/><br />
    18. 料号:<input id="GoodsNo" type="text" /><br />
    19. <input id="showItem" type="button" value="查询" />
    20. section>
    21. div>
    22. <script>
    23. //先根据Id查询记录 请求类型:GET 请求url: /api/Products/Id
    24. //请求到ProductsController.cs中的 public Product GetProduct(int id) 方法
    25. $("#showItem").click(function () {
    26. var inputLine = $("#line").val();
    27. $.ajax({
    28. url: "http://10.20.32.73:8000//api/Test/HelloOne?Line=" + inputLine,
    29. type: "get",
    30. dataType: 'json',
    31. success: function (data) {
    32. $("#GoodsNo").val(data.Message);
    33. },
    34. error: function (XMLHttpRequest, textStatus, errorThrown) {
    35. alert("请求失败,消息:" + textStatus + " " + errorThrown);
    36. }
    37. });
    38. });
    39. script>
    40. body>
    41. html>

    说明:其中http://10.20.32.73:8000为发布webAPI的网址

    总结:本文主要讲述了WebAPI项目的搭建及其配置,然后到发布及其测试整个过程。记录方便查阅。

  • 相关阅读:
    云容灾最佳实践!美创DBRA助力包头医学院第二附属医院核心系统容灾建设
    DHCP(自动分配ip地址实验案例)
    css取消移动端长按元素背景色
    Android FileObserver 的使用与简要原理
    据说,这是90%项目经理都会犯的错
    Java之序列化的详细解析
    双飞翼布局
    图书管理系统
    React 简书项目实战【3】实现搜索框动画
    2023国赛 C题论文 蔬菜类商品自动定价与补货策略
  • 原文地址:https://blog.csdn.net/qq_42711010/article/details/128146328