初级Web API+MySql获取数据

       Web API是网络应用程序接口。  它其实还是一个强大的平台,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务, 可以用来生成一些API,暴露服务和数据。 ASP.NET Web API 是.NET Framework上的一个框架,用来生成 web API。
一、创建Web API

启动 Visual Studio ,在开始页里选择“新建项目”。或者从“文件”菜单里,选择“新建项目”。

在模板面板中,选择“已安装”,并展开 Visual C# 节点。在 Visual C# 下面,选择 Web。在项目模板列表中,选择 ASP.NET MVC 4 Web 应用程序。将项目命名为 "MFirstWebAPI" 然后点击“确定”。

在弹出的“新 ASP.NET MVC 4 项目”对话框中,选择“Web API”然后点“确定”。

到目前为止,添加一个WEB API项目已结束。下面可进行代码的编写和配置的修改。

二、添加自定义Model

此例添加的是一个自定义Users对象,代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

namespace MFirstWAPI.Models

{

    public class Users

    {

        public int UserID { get; set; }

        public string UserName { get; set; }

        public string UserEmail { get; set; }

    }

}


三、上步完成后可添加控制器了,控制器就是控制层,在“Controllers”下有一个“HomeController.cs”的文件,

是一个传统的 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格式了。
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值