https://www.asp.net/media/4071077/aspnet-web-api-poster.pdf
1.You can host Web API inside IIS or inside your own process (self-hosting).
2.The HTTP request message is first converted to an HttpRequestMessage object, which provides strongly typed access to the HTTP message.
3.HttpMessageHandler
3.1 Delegating Handler
3.2 HTTPRoutingDispatcher
3.3 HTTPControllerDispatcher
StepA:Create Api Controller
4.Controller
StepB: Select controller action
4.1 Authentication Filters
4.2 Authorization Filters
StepC:Model Binding
4.3 Action Filters 源码https://github.com/aspnet/AspNetWebStack/blob/master/src/System.Web.Http/Filters/ActionFilterAttribute.cs
StepE: Invoke Action -->这里有可能触发Exception Filters
StepD:Result Conversion
在看pdf的时候,还需要注意标准
实际使用中遇到的问题
使用Autofac进行构造函数注入,但是依赖api传递进来的参数。
之前使用的方案是,在ActionFilter中拿到controller以及api参数,然后手动调用resolve去实例化,本来需要构造函数注入的属性。
调整之后:(必须在DelegateHandler中解析,因为ActionFilter的执行,是在Controller实例化之后)
在DelegateHandler中解析参数,并存储。然后在Autofac的lambda注册的地方,委托那边直接OwinRequestScopeContext拿到参数。
var apiRequest = request.Content.ReadAsAsync<ApiRequest<dynamic>>().Result;
OwinRequestScopeContext.Current.Items["CountryCode"] = apiRequest.Header.OpCo;