asp.net中的web api使用(非mvc程序)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Security;
using System.Web.SessionState;

namespace WebApi
{
    public class Global : System.Web.HttpApplication
    {

        protected void Application_Start(object sender, EventArgs e)
        {
            //注册区域(Areas)
            //需要下载这个dll,Microsoft Help Page  ,会自动生成帮助页面,文件存在区域(Areas)
            AreaRegistration.RegisterAllAreas();
            //注册 api 路由 必须写在mvc 路由注册之前否则会找不到。
            //WebApiConfig.Register(GlobalConfiguration.Configuration);

            //WebApiConfig.Register(GlobalConfiguration.Configuration);

            // 使api返回为json,
            //解决这个问题需要在接口函数中设置,如AllRoute()函数,但有个不好的地方,如果返回的结果是String类型,如123,返回的json就会变成"123";
            //这种方式把所有的返回数据都转为json了
            //GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
            //方式二,如只需要设置某一个的函数返回json,见AllRouteJson()


            //使用自定义路由需要这样调用,不然报错
            GlobalConfiguration.Configure(WebApiConfig.Register2);
        }     
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;

namespace WebApi
{
    public class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {

            //开启路由特性
            //config.MapHttpAttributeRoutes();
            //注册路由地址
            config.Routes.MapHttpRoute(
   name: "DefaultApi", //这个可以随意命名
   routeTemplate: "api/{controller}/{action}/{id}",//web api 的地址
   defaults: new { id = RouteParameter.Optional }
   );

        }
        //使用路由特性
        public static void Register2(HttpConfiguration config)
        {
            //开启路由特性
            config.MapHttpAttributeRoutes();
            //注册路由地址
            config.Routes.MapHttpRoute(
   name: "DefaultApi", //这个可以随意命名
   routeTemplate: "api/{controller}/{action}/{id}",//web api 的地址
   defaults: new { id = RouteParameter.Optional }
   );

        }
    }
}



using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Web;
using System.Web.Http;
using System.Web.Script.Serialization;

namespace WebApi
{
    /// <summary>
    /// 这是控制器类说明
    /// </summary>
     [RoutePrefix("api1")]  //自定义路由,所有函数加了route标签的路由前加该路径,对不是自定义没加route标签的函数不生效
    public class DomeController: ApiController
    {

     //需要下载这个dll,Microsoft Help Page  ,会自动生成帮助页面,文件存在区域(Areas)

        //帮助文档的设置
        //显示说明文档首先要设置:调试-生成-把xml文档文件选√,然后取消HelpPageConfig类下
        //config.SetDocumentationProvider(new XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/WebApi.xml")));
        //的行注释,路径改为设置的xml文件输出路径


        //在接口帮助页面显示接口说明,需要在函数前面加 ///描述
        //显示参数说明需要在函数前加描述<param name="参数名">
        //显示接口详情页的返回参数说明,需要加  在变量前加描述 /// <summary>


        /// <summary>
        /// 这是GetId方法
        /// </summary>
        /// <param name="i">变量i</param>
        /// <param name="n">变量n</param>
        /// <returns></returns>
        public DemoModel GetIdAnnotation(int i,int n)
        {
            return new DemoModel {id=1,name="a" };
        }



        //路由规则
        //路由加了action,调用时需要函数名,否则不需要,重载区分调用的函数

        //如果参数是设置的与路由设置的(设置的id)一致,则可以http://localhost:18444/api/Dome/GetIdRoute/1访问
        //否则是http://localhost:18444/api/Dome/GetIdRoute?i=1
        /// <summary>
        /// GetIdRoute
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public string GetIdRoute(int id)
        {
            return "GetIdRoute";
        }

        /// <summary>
        /// getAllRoute
        /// </summary>
        /// <returns></returns>
        //如果函数名不以Get等开头,则要在函数上加[HttpGet]等,不然路由不到
        [HttpGet]
        public HttpResponseMessage AllRoute()
        {
            //设置返回的数据格式
            String userName = "AllRoute";
            HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(userName, Encoding.GetEncoding("UTF-8"), "application/json") };
            return result;
        }
        /// <summary>
        /// 设置返回的数据格式二,序列化后再返回
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public HttpResponseMessage AllRouteJson()
        {
            //返回json格式的数据
            List<DemoModel> dm = new List<DemoModel>() { new DemoModel {id=1,name="name1",set=1},new DemoModel { id=2,name="name2",set=2} };
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            String str = serializer.Serialize(dm);
            HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") };
            return result;
        }

        //若以Get等开头,则可以用函数名访问:http://localhost:5123/api/Demo/GetSayHello?i=1&s=2
        /// <summary>
        /// GetSayHello
        /// </summary>
        /// 参数名要一致
        /// <param name="i">变量i</param>
        /// <param name="s">变量n</param>
        /// <returns></returns>
        public string GetSayHello(int i,string s)
        {
            return "hello world GetSayHello";
        }

        //{参数变量名称:约束}"来约束路由中的参数变量。
        /// <summary>
        /// 自定义路由特性1
        /// </summary>
        /// <returns></returns>
        [Route("Route/RouteActionName/{name:int?}")]//http://localhost:18444/api1/Route/RouteActionName/1?customerId=2 int?表示可选,int必选
        [HttpGet]
        public string RouteAction(int customerId)
        {
            return "hello world GetSayHello";
        }
        /// <summary>
        /// 自定义路由特性2
        /// </summary>
        /// <returns></returns>
        [Route("Route/{text}/RouteActionName/{text2}")]//http://localhost:18444/Route/1/RouteActionName?customerId=1
        [HttpGet]
        public string RouteAction2(int customerId)
        {
            return "hello world GetSayHello";
        }
        /// <summary>
        /// 自定义路由特性3
        /// </summary>
        /// <param name="text">text</param>
        /// <param name="id">id</param>
        /// <param name="i">i</param>
        /// <returns></returns>
        [Route("Route/{text}/RouteActionName/{text2}/{id}")]//http://localhost:18444/Route/t/RouteActionName/2/h?i=2,url变量与参数变量重叠会不显示参数
        [HttpGet]
        public string RouteAction3(int i,string id)
        {
            return "RouteAction3";
        }
    }
}


//在每个API说明页面的右下角增加一个测试的按钮。
//在Nuget中添加WebApiTestClient。
//在Areas\HelpPage\Views\Help\Api.cshtml添加以下代码:
//  @Html.DisplayForModel("TestClientDialogs")
//  @section Scripts
//{
//      <link type="text/css" href="~/Areas/HelpPage/HelpPage.css" rel="stylesheet" />
//      @Html.DisplayForModel("TestClientReferences")
//这样,就可以显示接口的测试按钮了





using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApi
{
    public class DemoModel
    {
        /// <summary>
        /// 这是id
        /// </summary>
        public int id { get; set; }

        /// <summary>
        /// 这是名称
        /// </summary>
        public string name { get; set; }

        //这是性别
        public int set { get; set; }
    }
}
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页