Web API 就是通过 HTTP 提交一串数据,然后处理,然后返回。
本连载介绍在 Visual Studio 中如何利用 MVC 实现 Web API(传统方式不用介绍了,人人都会。)
首先,新建项目。
在新建“ASP.NET Web 应用程序”后,选择 Web API。
以上是 Visual Studio 2017 的截图。
然后,认识核心内容
新建后,会发现很多文件,有很多多余的,我们关注核心文件。
Global.asax、App_Start/WebApiConfig.cs
Global.asax 这里面配置了 Web API 的路由:GlobalConfiguration.Configure(WebApiConfig.Register);。
App_Start/WebApiConfig.cs 中的 config.Routes.MapHttpRoute 使用的 name 不能重复。
WebApiConfig.cs
这里面配置了路由模板:api/{controller}/{id}。
ValuesController.cs
这里面根据路由映射响应请求,比如 Get() 方法(注意:其代码体只是一个示例,可以根据情况修改)。
使用一下
编译后,浏览器中输入 http://localhost:xxx/api/values/
返回一串 XML,由 XML 包装着一个值(微软很喜欢用 XML 作为返回结果)。
可是我们并没有 api、values 文件夹,为什么 URL 中有呢?原来这就是路由。路由定义了:第一层为 api;第二层为 controller 的名称,也就是类 ValuesController 的前半部分——values(微软对待路由是忽略大小写的);第三层是 id,在注册路由是标明了它是 Optional 的。
所以上面的 URL 就是由 public IEnumerable<string> Get() 方法处理的。
而 http://localhost:xxx/api/values/1 这个 URL 是由 public Result Get(int id) 处理的。注意:参数 id 与路由中配置的名称要一样。
如果我们把 Get(int id) 改为 Get(int id2) 然后用 http://localhost:xxx/api/values/1 去访问,会有什么结果呢?结果就是交由 Get() 来响应,因为参数名称与路由中定义的名称对应不上了,就会将 /1 当作是多余的来对待。
为什么是响应 Get 方法,而不是 Post 方法呢?因为我们是 GET 提交呀。所以:
最后:注册路由后,真实存在的文件能用原来的方式访问吗?能!但是如果恰好你的文件路径与路由配置相同,那就……
相关阅读