WebAPI是“直接路由”和“对象尚未初始化”错误

时间:2016-03-02 16:21:01

标签: c# visual-studio-2013 asp.net-web-api

我在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";
    }

请指教,非常感谢任何帮助。

2 个答案:

答案 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中的某种错误。