如果大家和我一样,需要在asp.net web form系统中,增加mvc4和web api相关的特性,又无从下手,那么希望这篇博文能给与你更好的指导,写本博文更重要的一个目的,就是对我在做该任务过程中的一些总结。当然网上也已经有了很多相关的资料,本博文也做了些参考,特在此声明。言归正传,就直接切入正题吧。
添加必要的dll引用
添加这些dll的引用,可以到网上下载,然后添加在web form项目中去,添加引用即可。另一个方法,就是用NuGet,下载安装,在项目中就使用的这个方法。
1、安装Microsoft ASP.NET MVC4,这个安装包,依赖于Microsoft ASP.NET Razor和Microsoft ASP.NET Web Pages,所以这两个也会自动安装
2、安装Microsoft ASP.NET Web API,这安装包依赖于如下包,它们也会自动安装:
1)Microsoft ASP.NET Web API Web Host
2) Microsoft ASP.NET Web API Core Libraries
3)Microsoft ASP.NET Web API Client Libraries
4)Microsoft Web Infrastructure
5)Microsoft .NET Framework4 Http client Libraries
3、安装Microsoft ASP.NET Web Optimization Framework
4、添加引用Microsoft.CSharp
修改web.config
1、在<appSettings></appSettings>节点中,添加如下子节点:
<add key="webpages:Version" value="2.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="PreserveLoginUrl" value="true" /> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" />
2、在<pages></pages>节点(该节点为system.web的子节点)中,添加如下子节点:
<namespaces> <add namespace="System.Web.Helpers" /> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Optimization" /> <add namespace="System.Web.Routing" /> <add namespace="System.Web.WebPages" /> </namespaces>
3、在<configuration></configuration>节点中,添加如下子节点:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>
4、如果在system.webServer节点中,没有以下子节点,则增加。
<modules runAllManagedModulesForAllRequests="true" /> <validation validateIntegratedModeConfiguration="false" />
修改Application_Start方法
修改Global.asax的code behind类中的Application_Start函数,在其中增加如下代码:
AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles);
以上FilterConfig、RouteConfig和BundleConfig类,都是自定义的类,如果你新建一个mvc4应用程序,则会在App_Start文件夹中,自动生成这些类的定义。我这里只是把WebApiConfig类和RouteConfig类合并成了一个RouteConfig类,代码如下:
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } }
其他
目前,已经可以正常的运行web api和mvc4,但是如果来增进mvc在web form中的特点
1、如果你需要使用到view,就需要建一个Views文件夹,并从mvc4应用程序相应文件夹拷贝web.config
2、如何能增加创建Area、View、Controller的向导?需要修改项目文件*.csproj中的<ProjectTypeGuids>节点的值为:{E3E379DF-F4C6-4180-9B81-6769533ABE47};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}。下图即是创建view时的截图:
最终效果
下面是asp.net web form和mvc4在同一个站点中时,浏览的效果图: