asp.net webapi有两种寄宿模式,一种是webhost,一种是selfhost,为什么可以有两种模式的原因在于webapi有一个相对独立的消息处理管道,只要给这个消息管道传递一个封装好的对象,便可以得到处理好的结果。而怎么去封装这个对象,如何得到这个对象就不是webapi所关心的了。在webhost模式下,这个对象是由iis+asp.net框架共同完成的,在selfhost模式下,可以是任何可以完成http消息响应和接收的应用程序,比如console、winform、windows server等。宿主只需要完成http消息的接受和响应,处理过程交给webapi即可。我们先来看下在webhost模式下一个http报文的大概处理过程,首先有个总体把握,然后再按需去学习是个不错的学习方法。

      首先客户端发出一个http请求形成http请求报文被iis捕捉,iis解析原始报文并作出相应处理,比如,如果请求的是一些静态资源(*.css、*.html……),此时iis可以直接返回相应资源给客户端,当然如果需要托管代码处理也是可以的,配置web.config即可。如果iis不处理,或者需要进一步处理,则交由asp.net托管代码处理,在这个处理过程中,可以自定义一些httpmodule,并在web.confg的system.webserver(iis模式在集成模式下才有效)注册,怎么自定义后面会说明。最后由iis生成http响应报文给客户端,在webhost模式下,一次http请求的大概过程就这样结束了。