大佬教程收集整理的这篇文章主要介绍了asp.net-mvc – MapMvcAttributeRoutes:此方法不能在应用程序的启动前初始化阶段,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
[Test] public void HasRoutesInTable() { var routes = new RouteCollection(); routes.MapMvcAttributeRoutes(); Assert.That(routes.Count,Is.GreaterThan(0)); }
这导致:
System.InvalidoperationException : This method cAnnot be called during the applications pre-start initialization phase.
此错误消息的大多数答案涉及在web.config文件中配置成员资格提供程序。此项目没有成员资格提供程序或web.config文件,所以错误似乎是由于某些其他原因。如何将代码移出此“启动前”状态,以便测试可以运行?
在调用httpConfiguration.EnsureInitialized()之后,ApiController上的属性的等效代码可以正常工作。
public static class RouteCollectionExtensions { public static void MapMvcAttributeRoutesForTesTing(this RouteCollection routes) { var controllers = (from t in typeof(HomeController).Assembly.GetExportedTypes() where t != null && t.IsPublic && t.Name.EndsWith("Controller",StringComparison.ordinalIgnoreCasE) && !t.IsAbstract && typeof(IController).IsAssignableFrom(t) SELEct t).ToList(); var mapMvcAttributeRoutesMethod = typeof(RouteCollectionAttributeRoutIngExtensions) .GetMethod( "MapMvcAttributeRoutes",BindingFlags.NonPublic | BindingFlags.Static,null,new Type[] { typeof(RouteCollection),typeof(IEnumerable<Type>) },null); mapMvcAttributeRoutesMethod.Invoke(null,new object[] { routes,controllers }); } }
这里是我如何使用它:
public class HomeControllerRouteTests { [Fact] public void requestTo_Root_ShouldMapTo_HomeIndex() { // Arrange var routes = new RouteCollection(); // Act - registers traditional routes and the new attribute-defined routes RouteConfig.RegisterRoutes(routes); routes.MapMvcAttributeRoutesForTesTing(); // Assert - uses MvcRouteTester to test specific routes routes.ShouldMap("~/").To<HomeController>(x => x.Index()); } }
现在的一个问题是,在RouteConfig.RegisterRoutes(路由),我不能调用routes.MapMvcAttributeRoutes()所以我把这个调用移动到我的Global.asax文件。
另一个问题是这个解决方案是潜在脆弱的,因为RouteCollectionAttributeRoutIngExtensions中的上述方法是内部的,可以随时删除。主动方法是检查mapMvcAttributeRoutesMethod变量是否为null,如果是,则提供适当的错误/异常消息。
注意:这只适用于ASP.NET MVC 5.0。 ASP.NET MVC 5.1中的属性路由发生了重大变化,并且mapMvcAttributeRoutesMethod方法已移至内部类。
以上是大佬教程为你收集整理的asp.net-mvc – MapMvcAttributeRoutes:此方法不能在应用程序的启动前初始化阶段全部内容,希望文章能够帮你解决asp.net-mvc – MapMvcAttributeRoutes:此方法不能在应用程序的启动前初始化阶段所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。