如何将.NET Framework版的WebApi为?
摘要:如果不得不使用.Net Framework开发web api,可以参考本文。主要内容包括创建、属性路由、配置Swagger、IHttpActionResult接口、.bat文件一键启动、打包发布。
1 创建
使用.Net做web后端,推荐使用.Net Core,微软在此基础上做了很多适配,包括内置Swagger,可以直接启动等等。而.Net Framework版,需要手动配置很多内容。
如果需要调用的项目是基于.Net Framework,那么web项目也应基于.Net Framework开发。或者其他原因不得不使用.Net Framework开发web项目,可以参考本文。
打开VS,在搜索栏输入“ASP.NET Web”,选择.Net Framework版,注意,这里要创建的是空白API项目,在前后端分离的项目中只作为后端接口,而不是MVC(模型-视图-控制器)
填写项目名,选择位置,选择需要的框架
创建一个空白项目,勾选“Web API”,取消勾选“HTTPS配置”
添加完成后,会创建以下目录结构:
“App_Data”目录用于方式一些资源文件;
“App_Start”目录下用于放置一些配置资源,默认已有一个配置类“WebApiConfig”,内容如下。config.MapHttpAttributeRoutes();表示启用了属性路由,允许在控制器和操作方法上直接使用特性(如 [Route])来定义路由规则。下半部分表示定义默认路由规则。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
“Controllers”目录下放置对外接口;
“Models”目录下放置后端接口的内部逻辑,比如要接入数据库的操作等等。这些目录作为一个规范,如果违反这个规范随意放置,也可以正常运行,只不过看着比较杂乱。
2 测试
项目创建完成后,并没有提供任何对外接口,添加一个测试接口。选中“Controllers”目录=>右键=>添加=>Web API控制器类
填写名称,建议名称为“xxxController”(xxx为需要写的名称),此名称会被上文提到的“默认路由规则”匹配,将“xxx”作为api的一部分。
类创建完成后,会自动生成示例程序,包含Get, Post, Put, Delete请求
public class TestController : ApiController
{
// GET api/<controller>
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/<controller>/5
public string Get(int id)
{
return "value";
}
// POST api/<controller>
public void Post([FromBody] string value)
{
}
// PUT api/<controller>/5
public void Put(int id, [FromBody] string value)
{
}
// DELETE api/<controller>/5
public void Delete(int id)
{
}
}
启动项目,基于.Net Framework的web项目需要借助于服务启动,vs调试默认使用IIS服务。
启动完成后,没有配置默认的访问地址就会显示如下界面。
测试Api访问。
3 配置属性路由规则
上文提到,配置类“WebApiConfig”中配置了默认路由规则,启用了属性路由。属性路由就是使用特性标记路由,使用属性路由代替了默认路由。
