asp.net-web-api – 不能构造String类型
发布时间:2020-12-16 00:38:34 所属栏目:asp.Net 来源:网络整理
导读:我正在使用Web.api和Unity,当我尝试打开默认的“帮助”区域时,我收到以下错误: [InvalidOperationException: The type String cannot be constructed. You must configure the container to supply this value.]Microsoft.Practices.ObjectBuilder2.Dynam
我正在使用Web.api和Unity,当我尝试打开默认的“帮助”区域时,我收到以下错误:
[InvalidOperationException: The type String cannot be constructed. You must configure the container to supply this value.] Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.GuardTypeIsNonPrimitive(IBuilderContext context,SelectedConstructor selectedConstructor) +280 Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.PreBuildUp(IBuilderContext context) +356 Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context) +260 Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlanCreatorPolicy.CreatePlan(IBuilderContext context,NamedTypeBuildKey buildKey) +205 Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context) +231 Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context) +260 Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey) +250 Microsoft.Practices.Unity.ObjectBuilder.NamedTypeDependencyResolverPolicy.Resolve(IBuilderContext context) +101 BuildUp_System.Web.Http.HttpRouteCollection(IBuilderContext ) +202 Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context) +42 Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context) +319 Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context) +260 Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey) +250 Microsoft.Practices.Unity.ObjectBuilder.NamedTypeDependencyResolverPolicy.Resolve(IBuilderContext context) +101 BuildUp_System.Web.Http.HttpConfiguration(IBuilderContext ) +202 Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context) +42 Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context) +319 Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context) +260 Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey) +250 Microsoft.Practices.Unity.ObjectBuilder.NamedTypeDependencyResolverPolicy.Resolve(IBuilderContext context) +101 BuildUp_API.Areas.HelpPage.Controllers.HelpController(IBuilderContext ) +204 Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context) +42 Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context) +319 Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context) +260 Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t,Object existing,String name,IEnumerable`1 resolverOverrides) +373 [ResolutionFailedException: Resolution of the dependency failed,type = "API.Areas.HelpPage.Controllers.HelpController",name = "(none)". Exception occurred while: while resolving. Exception is: InvalidOperationException - The type String cannot be constructed. You must configure the container to supply this value. ----------------------------------------------- At the time of the exception,the container was: Resolving API.Areas.HelpPage.Controllers.HelpController,(none) Resolving parameter "config" of constructor API.Areas.HelpPage.Controllers.HelpController(System.Web.Http.HttpConfiguration config) Resolving System.Web.Http.HttpConfiguration,(none) Resolving parameter "routes" of constructor System.Web.Http.HttpConfiguration(System.Web.Http.HttpRouteCollection routes) Resolving System.Web.Http.HttpRouteCollection,(none) Resolving parameter "virtualPathRoot" of constructor System.Web.Http.HttpRouteCollection(System.String virtualPathRoot) Resolving System.String,(none) ] Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t,IEnumerable`1 resolverOverrides) +436 Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t,IEnumerable`1 resolverOverrides) +50 Microsoft.Practices.Unity.UnityContainer.Resolve(Type t,ResolverOverride[] resolverOverrides) +48 Microsoft.Practices.Unity.UnityContainerExtensions.Resolve(IUnityContainer container,Type t,ResolverOverride[] overrides) +61 Unity.Mvc4.UnityDependencyResolver.GetService(Type serviceType) +140 System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext,Type controllerType) +87 [InvalidOperationException: An error occurred when trying to create a controller of type 'API.Areas.HelpPage.Controllers.HelpController'. Make sure that the controller has a parameterless public constructor.] System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext,Type controllerType) +247 System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext,Type controllerType) +438 System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext,String controllerName) +226 System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext,IController& controller,IControllerFactory& factory) +326 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext,AsyncCallback callback,Object state) +177 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext,Object state) +88 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context,AsyncCallback cb,Object extraData) +50 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +301 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously) +155 我是新来的团结,我确定我错过了一步。 public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi",routeTemplate: "api/{controller}/{action}/{id}",defaults: new { id = RouteParameter.Optional } ); //Custom formatter config.Formatters.Clear(); config.Formatters.Add(new JSONPFormater()); config.EnableSystemDiagnosticsTracing(); //Setup DI Bootstrapper.Initialise(); } Bootstraper.cs(默认值) public static class Bootstrapper { public static IUnityContainer Initialise() { var container = BuildUnityContainer(); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); return container; } private static IUnityContainer BuildUnityContainer() { var container = new UnityContainer(); // register all your components with the container here // it is NOT necessary to register your controllers // e.g. container.RegisterType<ITestService,TestService>(); RegisterTypes(container); return container; } public static void RegisterTypes(IUnityContainer container) { } } 我尝试在一个web.config <configSections> <!-- For more information on Entity Framework configuration,visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,EntityFramework,Version=5.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/> </configSections> <connectionStrings> <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)v11.0;Initial Catalog=aspnet-API-20130708152001;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnet-API-20130708152001.mdf" /> <add name="<REMOVED>DBEntities" connectionString="metadata=res://*/Models.DAL.<REMOVED>.csdl|res://*/Models.DAL.<REMOVED>.ssdl|res://*/Models.DAL.<REMOVED>.msl;provider=System.Data.SqlClient;provider connection string="data source=<REMOVED>;initial catalog=<REMOVED>;persist security info=True;user id=<REMOVED>;password=<REMOVED>;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /> <!--unity setting--> <unity> <containers> <types> <register type="API.Areas.HelpPage.Controllers.HelpController,API"> <constructor> <param valu=""></param> </constructor> </register> </types> </containers> </unity> 我朝着正确的方向前进吗? 谢谢 更新: public class HelpController : Controller { public HelpController() : this(GlobalConfiguration.Configuration) { } public HelpController(HttpConfiguration config) { Configuration = config; } public HttpConfiguration Configuration { get; private set; } public ActionResult Index() { return View(Configuration.Services.GetApiExplorer().ApiDescriptions); } public ActionResult Api(string apiId) { if (!String.IsNullOrEmpty(apiId)) { HelpPageApiModel apiModel = Configuration.GetHelpPageApiModel(apiId); if (apiModel != null) { return View(apiModel); } } return View("Error"); } } url我正在尝试访问:http:// hostname:port / Help 解决方法
作为你的代码示例,我假设你是一个控制器,而不是一个API控制器(从web api)。
您的api控制器依赖于HttpConfiguration的构造函数。容器可能没有这种类型的定义,因此不知道如何解决它,并且错误消息上的字符串应该来自这种类型作为依赖。我建议您使用GlobalConfiguration静态类并访问Configuration属性以获取HttpConfiguration实例。您可以在属性中抽象出样本: // include this namespace using System.Web.Http; public class HelpController : Controller { // remove the constructors... // property protected static HttpConfiguration Configuration { get { return GlobalConfiguration.Configuration; } } public ActionResult Index() { return View(this.Configuration.Services.GetApiExplorer().ApiDescriptions); } public ActionResult Api(string apiId) { if (!String.IsNullOrEmpty(apiId)) { HelpPageApiModel apiModel = this.Configuration.GetHelpPageApiModel(apiId); if (apiModel != null) { return View(apiModel); } } return View("Error"); } } 现在,如果您使用的是Api控制器,则只需直接访问ApiController(Api控制器的基类)上的this.Configuration属性,并获取一个HttpConfiguration实例。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – ASP.Net MVC 2.0 Html.HiddenFor HtmlHelpe
- image – 将Viewbag数据从View传递到ASP.Net MVC3 Razor中的
- asp.net-mvc – OnValidateIdentity会话为空 – Mvc Owin
- ASP.net使用表单将数据插入到sql server表中
- 单个ASP.net网站与多个实例和web.configs
- asp.net-core – ASP.NET vNext – 本地化(.resx)
- asp.net 4路由不工作在iis 7
- asp.net-mvc – 通过webapp文件和apache站点配置设置mod-mo
- 在ASP.NET 3.5中的Response.Clear
- 关于二级缓存之间同步问题的思考
推荐文章
站长推荐
- asp.net – Visual Studio开发服务器(2010)和NTL
- asp.net – 为什么VS 2008 SP1不允许我编辑globa
- ASP.NET MVC4 Razor模板简易分页效果
- asp.net-mvc – “Inject”Request.Url.Hosts –
- 如何创建自定义授权属性以检查Asp.Net Core中的角
- .net – 带标准短语的免费/开源resx文件
- asp.net – 在Web api控制器中手动验证模型
- .net – RESTful WCF的裸最低配置
- 如何在ASP.NET MVC 3中正确实施“确认密码”?
- asp.net-mvc – Asp.Net MVC:为什么我的视图将N
热点阅读