ASP.net Web API的模块依赖关系

安装好MVC4之后,Visual Studio的工程创建向导里就可以选择“ASP.NET MVC4 Web Application”来创建MVC4和Web API工程,如果你在下一步中如图选择了“Web API”:

那么你会发现向导自动地给你添加了好多额外的类库引用,这些类库有些名称挺误导人,我也花了些时间才搞清楚它们之间的关系,我总结成一张图,现贴出来和大家分享:

上图中用天蓝色背景圈起来的模块即时Web API的必须的模块,而其余部分如果用不着,就可以删除掉,如果你仅仅是想使用Web API,而无需做页面渲染输出,那么蓝色背景圈左边的这些白色的模块都可以删掉,如果EntityFramework及云存储你没用到,那右边的这两个模块你也可以删掉,另外还有向导自动给你添加的Controller、View、Javascript、MVC路由配置以及Web.Config中的一些内容,其实都可以删掉。所以我认为更好的创建单纯的Web API工程的方法是在在MVC4工程类型选择的时候选“Empty”,这样创建出来的工程也许更贴近你的需要,然后你再使用NuGet包管理工具把不用的包拿掉:

去除MVC4的同时NuGet会提示你是否也去除WebPage和Razor,选是,再去掉不必要的View,MVC路由配置和MVC过滤器配置。这是前后对照:

编译,会出现错误,因为Global.asax中有对刚删除的旧库的引用,把这些相关代码去掉即可。另外Web.Config也要去除一些不必要的namespace引用,这是改好后的Web.Config:

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" /> <!-- 设置为false来忽略掉集成模式(IIS相关)配置下的一些错误 -->
    <modules runAllManagedModulesForAllRequests="true" /> <!-- 对每个Request都执行Application_BeginRequest -->
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
</configuration>

这么一来,终于得到了一个“纯净”的ASP.net Web API的空白工程。

posted @ 2013-03-07 13:43  guogangj  阅读(1156)  评论(0编辑  收藏  举报