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的空白工程。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人