1. 程式人生 > >初級Web API+MySql獲取資料

初級Web API+MySql獲取資料

是一個傳統的 ASP.NET MVC 控制器。它只是負責處理站點的HTML頁,跟Web API沒有直接關係。 手動新增一個API控制器 選擇包含空讀/寫操作的API控制器,然後新增。 新增完後可看到空白的控制器程式碼,然後根據需要補充邏輯需求。 例: using MFirstWAPI.Models; using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Formatting; using System.Net.Http.Headers; using System.Text; using System.Web.Http; using System.Web.Script.Serialization; namespace MFirstWAPI.Controllers {     public class UsersController : ApiController     {         // GET api/values         public IEnumerable<Users> Get()         {             List<Users> listUser = new List<Users>();             MySqlConnection mysql = getMySqlConnection();             MySqlCommand mySqlCommand = getSqlCommand("select * from user",mysql);             mysql.Open();             MySqlDataReader reader = mySqlCommand.ExecuteReader();             try             {                 while (reader.Read())                 {                     if (reader.HasRows)                     {                         Users user = new Users();                         user.UserID = reader.GetInt32("ID");                         user.UserName = reader.GetString("username");                         user.UserEmail = reader.GetString("useremail");                         listUser.Add(user);                     }                 }             }             catch             {                 throw new HttpResponseException(HttpStatusCode.NotFound);             }             finally             {                 mysql.Close();             }             return listUser;         }         // GET api/Users/5         public Users GetUserByID(int id)         {             Users user = new Users();             MySqlConnection mysql = getMySqlConnection();             MySqlCommand mySqlCommand = getSqlCommand("select * from USER where ID=" + id, mysql);             mysql.Open();             MySqlDataReader reader = mySqlCommand.ExecuteReader();             try             {                 while (reader.Read())                 {                     if (reader.HasRows)                     {                         user.UserID = reader.GetInt32(0);                         user.UserName = reader.GetString(1);                         user.UserEmail = reader.GetString(2);                     }                 }                 reader.Close();             }             catch             {                 throw new HttpResponseException(HttpStatusCode.NotFound);             }             finally             {                 reader.Close();             }             return user;         }         //GET api/Users/?username=xx         public IEnumerable<Users> GetUserByName(string userName)         {             List<Users> listuser = new List<Users>();             MySqlConnection msql = getMySqlConnection();             MySqlCommand mySqlCommand = getSqlCommand("select * from USER where username like'%" + userName+"%'",msql);             msql.Open();             MySqlDataReader reader = mySqlCommand.ExecuteReader();             try             {                 while (reader.Read())                 {                     if (reader.HasRows)                     {                         Users user = new Users();                         user.UserID = reader.GetInt32("ID");                         user.UserName = reader.GetString("USERNAME");                         user.UserEmail = reader.GetString("USEREMAIL");                         listuser.Add(user);                     }                 }                 reader.Close();             }             catch             {                 throw new HttpResponseException(HttpStatusCode.NotFound);             }             finally             {                 reader.Close();             }             return listuser;         }         // POST api/values         public void Post([FromBody]string value)         {         }         // PUT api/values/5         public void Put(int id, [FromBody]string value)         {         }         // DELETE api/values/5         public void Delete(int id)         {         }         private static MySqlConnection getMySqlConnection()         {             MySqlConnection mysql = new MySqlConnection(ConfigurationManager.ConnectionStrings["MySqlConnection"].ConnectionString);             return mysql;         }         public static MySqlCommand getSqlCommand(String sql, MySqlConnection mysql)         {             MySqlCommand mySqlCommand = new MySqlCommand(sql, mysql);             return mySqlCommand;         }     } } 此處程式碼,主要補充了Get方法的邏輯。資料從mysql資料庫中獲取。例中MySql對應user表中資料如下
獲取資料共寫了三個get方法,第一個是獲取所有user資料, 第二個根據Users 的ID獲取對應Users,第三個根據UserName獲取Users。為了能夠通過MySql獲取資料,需要在Web.config的<connectionStrings>節點中新增     <add name="" providerName="System.Data.SqlClient" connectionString=""/> name為connectionString對應名稱,connectionString中為連線mysql的配置 程式碼中通過ConfigurationManager.ConnectionStrings["name"].ConnectionString獲取mysql配置。 完成程式碼編寫後,即可對進行程式碼測試。如果需要部署到IIS,則需要釋出網站,然後配置IIS,需要注意的是IIS應用程式池需要 .net FramWork版本為4.0。否則部署不成功。 Chorm通過 IIS獲取資料如下:
四、修改返回資料JSON非XML 如果不修改返回資料型別,chrome中預設返回的資料並不是以上圖片所示資料格式,而是XML型別,IE下返回的資料位JSON格式。 那麼如何修改只返回JSON而遮蔽掉,百度後會有很多例項,本例使用的是通過使用自定義的只返回Json Result的content negotiation代替Web Api中預設的content negotiation。Conneg通過實現IContentNegotiator的Negotiator方法實現擴充套件。Negotiator方法返回ContentNegotiationResult(它包裝了你選擇的headers和formatter)。
下面的方法通過傳遞一個JsonMediaTypeFormatter給自定義的conneg negotiator,讓它一直返回applicaton/json 的content-type以及JsonMediaTypeFormatter。這種方法避免了每次請求都要重新建立一次formatter。 方法如下:

public class JsonContentNegotiator : IContentNegotiator

        {

            private readonly JsonMediaTypeFormatter _jsonFormatter;

            public JsonContentNegotiator(JsonMediaTypeFormatter formatter)

            {

                _jsonFormatter = formatter;

            }

            public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters)

            {

                var result = new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json"));

                return result;

            }

        }

然後接下來,需要在HttpConfiguration例項上註冊新的實現機制,在App_Start下找到WebApiConfig.cs新增程式碼,新增完後代碼如下  public static class WebApiConfig     {         public static void Register(HttpConfiguration config)         {             config.Routes.MapHttpRoute(                 name: "DefaultApi",                 routeTemplate: "api/{controller}/{id}",                 defaults: new { id = RouteParameter.Optional }             );            var jsonFormatter = new JsonMediaTypeFormatter();             config.Services.Replace(typeof(IContentNegotiator), new MFirstWAPI.Controllers.UsersController.JsonContentNegotiator(jsonFormatter));         }     } 紅色部分為新加程式碼 最後編譯釋出,通過Chrome瀏覽器獲取資料為JSON格式了。