asp.net中的web api使用(非mvc程序)
程序员文章站
2024-02-20 10:46:40
...
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; }
}
}
上一篇: pygame之坦克大战(三)
推荐阅读
-
asp.net实现在非MVC中使用Razor模板引擎的方法
-
asp.net中的web api使用(非mvc程序)
-
使用HttpClient向web api发异步请求 博客分类: asp.net mvc webapi.net mvc
-
ASP.NET Core Web 应用程序系列(三)- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)
-
HTML5关于上传API的一些使用(中)_html/css_WEB-ITnose
-
ASP.NET MVC中Log4Net记录错误日志的使用
-
asp.net实现在非MVC中使用Razor模板引擎的方法
-
ASP.NET MVC中图表控件的使用方法
-
ASP.NET中Web API的简单实例
-
ASP.NET MVC中图表控件的使用方法