安裝好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 visithttp://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的空白工程。