【ASP.Net】 Web API 学习笔记(一)

这篇笔记所用的技术版本:

Web API 2  VS2017

1. web api继承接口 api controller, asp mvc继承接口controller

2. If you are familiar with ASP.NET MVC, Web API routing is very similar to MVC routing. The main difference is that Web API uses the HTTP method, not the URI path, to select the action. You can also use MVC-style routing in Web API.

3. Controller是用来负责handle http的request的. 但是具体哪个request invoke的是哪个action, 需要进行一个配置. 叫做routing tables, 在web api项目里面一般是 WebApiConfig.cs这个文件.

 1 public static class WebApiConfig
 2     {
 3         public static void Register(HttpConfiguration config)
 4         {
 5             // Web API configuration and services
 6 
 7             // Web API routes
 8             config.MapHttpAttributeRoutes();
 9 
10             config.Routes.MapHttpRoute(
11                 name: "DefaultApi",
12                 routeTemplate: "api/{controller}/{id}",
13                 defaults: new { id = RouteParameter.Optional }
14             );
15         }
16     }
WebApiConfig

之后需要通过一个 GlobalConfiguration去配置.

 1 public class WebApiApplication : System.Web.HttpApplication
 2     {
 3         protected void Application_Start()
 4         {
 5             GlobalConfiguration.Configure(config =>
 6             {
 7                 config.MapHttpAttributeRoutes();
 8 
 9                 config.Routes.MapHttpRoute(
10                     name: "DefaultApi",
11                     routeTemplate: "api/{controller}/{id}",
12                     defaults: new { id = RouteParameter.Optional }
13                 );
14             });
15         }
16     }
WebApiApplication

4. 如果希望controller中的方法不会作为action去被invoke, 则需要加上一个[NonAction]属性

5. 一个web api的controller的action可以返回的内容有: void, HttpReponseMessage, IHttpActionResult,等等, 可以参考下面的列表:

Return typeHow Web API creates the response
void Return empty 204 (No Content)
HttpResponseMessage Convert directly to an HTTP response message.
IHttpActionResult Call ExecuteAsync to create an HttpResponseMessage, then convert to an HTTP response message.
Other type Write the serialized return value into the response body; return 200 (OK).

 

1 public interface IHttpActionResult
2 {
3     Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken);
4 }
IHttpActionResult

 

 1 public class TextResult : IHttpActionResult
 2 {
 3     string _value;
 4     HttpRequestMessage _request;
 5 
 6     public TextResult(string value, HttpRequestMessage request)
 7     {
 8         _value = value;
 9         _request = request;
10     }
11     public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
12     {
13         var response = new HttpResponseMessage()
14         {
15             Content = new StringContent(_value),
16             RequestMessage = _request
17         };
18         return Task.FromResult(response);
19     }
20 }
TextResult

 

1 public class ValuesController : ApiController
2 {
3     public IHttpActionResult Get()
4     {
5         return new TextResult("hello", Request);
6     }
7 }
ValuesController

 

6. Controller 中声明的方法被称为Action methods, 或者直接叫做Actions.

7. Routing有三个阶段: 1. 寻找匹配的URI 路由模板. 2. 选择一个Controller. 3. 选择一个action.

8. web api2 中, Controller中什么样的方法被认为是一个Action.

  启动attribute routing: 在WebAPIConfig文件中, config.MapHttpAttributeRoutes().

9. web api2中的attribute rout, 可以在Controller上面加上[RoutePrefix], 然后在action上面加上[HttpMethod, Route("")] 为什么要有这种方式的route, 因为传统的 基于convention-based routing往往不能胜任那些具备复杂的参数的request。

10. 在attribute中可以设置一个name属性去指定某个route.RouteOrder属性去指定升序或降序 

 1 public class BooksController : ApiController
 2 {
 3     [Route("api/books/{id}", Name="GetBookById")]
 4     public BookDto GetBook(int id) 
 5     {
 6         // Implementation not shown...
 7     }
 8 
 9     [Route("api/books")]
10     public HttpResponseMessage Post(Book book)
11     {
12         // Validate and add book to database (not shown)
13 
14         var response = Request.CreateResponse(HttpStatusCode.Created);
15 
16         // Generate a link to the new book and set the Location header in the response.
17         string uri = Url.Link("GetBookById", new { id = book.BookId });
18         response.Headers.Location = new Uri(uri);
19         return response;
20     }
21 }
BooksController

11. webapiconfig.cs 在这里配置httpconfiguration.

12(same as 8). config.maphttpAttributeRoutes(). system.web.http命名空间中的 HttpConfigurationExtensions静态类中的静态方法, To enable attribute routing, call MapHttpAttributeRoutes during configuration. This extension method is defined in the System.Web.Http.HttpConfigurationExtensions class.

13. HttpConfiguration.Formatters

Media Formatters in ASP.NET Web API 2

14. HttpConfiguration Settings: https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/configuring-aspnet-web-api

MemberDescription
DependencyResolver Enables dependency injection for controllers. See Using the Web API Dependency Resolver.
Filters Action filters.
Formatters Media-type formatters.
IncludeErrorDetailPolicy Specifies whether the server should include error details, such as exception messages and stack traces, in HTTP response messages. See IncludeErrorDetailPolicy.
Initializer A function that performs final initialization of the HttpConfiguration.
MessageHandlers HTTP message handlers.
ParameterBindingRules A collection of rules for binding parameters on controller actions.
Properties A generic property bag.
Routes The collection of routes. See Routing in ASP.NET Web API.
Services The collection of services. See Services.
posted @ 2018-05-28 16:09  YanyuWu  阅读(145)  评论(0)    收藏  举报