我在Visual Studio 2013上有一个Web Api项目。 突然,我开始得到这个错误,没有做任何改变:
直接路由不能使用参数'controller'。指定一个 用文本路径代替此参数来创建路径 控制器。
> Line 12: protected void Application_Start() > Line 13: { > Line 14: GlobalConfiguration.Configure(WebApiConfig.Register); > Line 15: GlobalConfiguration.Configuration.IncludeErrorDetailPolicy IncludeErrorDetailPolicy.Always; > Line 16: GlobalConfiguration.Configuration.EnsureInitialized();
当我刷新页面时,我收到另一个错误:
{“message”:“发生错误。”,“exceptionMessage”:“ 对象尚未初始化。确保这件事 在应用程序中调用HttpConfiguration.EnsureInitialized() 所有其他初始化代码之后的启动代码。“,”exceptionType“: “System.InvalidOperationException”,“stackTrace”:“at System.Web.Http.Routing.RouteCollectionRoute.get_SubRoutes()\ r \ n at System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(字符串 virtualPathRoot,HttpRequestMessage request)\ r \ n at System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase httpContext)“}
这是我的WebApiConfig:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
我的Global.asax.cs:
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
GlobalConfiguration.Configuration.EnsureInitialized();
}
这是我在测试控制器上的测试功能:
public string Get(int id)
{
return "value";
}
请指教,非常感谢任何帮助。
答案 0 :(得分:1)
我的建议是在WebApiConfig中注释掉以下内容:
// config.Routes.MapHttpRoute(
// name: "DefaultApi",
// routeTemplate: "{controller}/{id}",
// defaults: new { id = RouteParameter.Optional }
//);
然后确保您的路由属性在控制器上设置为:
[RoutePrefix("api/test")]
public class TestController : ApiController
{
[Route("{id}")]
public string Get(int id)
{
return "value";
};
}
然后拨打电话:
的http:// <强> myapiurl 强> / API /测试/ 1
答案 1 :(得分:1)
在没有找到解决方案的情况下搜索互联网很长时间之后,我从头开始重新创建项目并解决了这个问题。 它似乎是Visual Studio 2013中的某种错误。