C# A「;“直达路线”;及;对象尚未初始化";错误,WebAPI

C# A「;“直达路线”;及;对象尚未初始化";错误,WebAPI,c#,visual-studio-2013,asp.net-web-api,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);

我在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();
刷新页面时,我收到另一个错误:

{“消息”:“发生了错误”。,“异常消息”:“错误” 对象尚未初始化。请确保 HttpConfiguration.EnsureInitialized()在应用程序的 所有其他初始化代码之后的启动代码。“,“exceptionType”: “System.InvalidOperationException”、“stackTrace”:“在 System.Web.Http.Routing.RouteCollectionRoute.get\u子例程()\r\n位于 System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(字符串 VirtualPath,HttpRequestMessage请求)\r\n位于 System.Web.Http.WebHost.Routing.HttpWebRoute.GetRoutedData(HttpContextBase httpContext)“}

这是我的网站配置:

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 }
        );
    }
}
// config.Routes.MapHttpRoute(
//    name: "DefaultApi",
//    routeTemplate: "{controller}/{id}",
//    defaults: new { id = RouteParameter.Optional }
//);
My 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";
    }

请提供建议,我们将非常感谢您的帮助。

我的建议是从您的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 }
        );
    }
}
// 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://myapirl/api/test/1


我的建议是从您的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 }
        );
    }
}
// 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://myapirl/api/test/1


在互联网上搜索了很长一段时间没有找到解决方案后,我从头开始重新创建了这个项目,解决了这个问题。
这似乎是Visual Studio 2013中的某种缺陷。

在互联网上搜索了很长时间而没有找到解决方案后,我从头开始重新创建了该项目,解决了这个问题。
这似乎是Visual Studio 2013中的某种错误。

您的控制器的名称是什么,您用来测试它的路径是什么?我的控制器的名称是:test。这是链接:http://../../.../test/1What 是您的控制器的名称,您用来测试它的路径是什么?我的控制器的名称是:test。这是链接:http://../../.../test/1or 将routeTemplate设置为:
routeTemplate:“api/{controller}/{id}”
对于WebAPI路由,有很多方法可以实现同样的效果,但我更喜欢属性约定,尤其是对于疑难解答,显式使用路由帮助我解决了很多问题,特别是当控制器变大的时候。我想是的,另一方面,我发现到处都有属性让我有些恼火。。。谢谢你的回答,我尝试了你的建议,但是我仍然得到同样的错误。在我出现这些错误之前,一切都运行得很好,我不知道它为什么开始出错……一定是某些东西发生了变化才触发了这些错误。在谷歌上搜索我看到的消息,它可能是由各种问题引起的,我想你只需要排除所有问题:或者将routeTemplate设置为:
routeTemplate:
对于WebAPI路由,有很多方法可以实现同样的效果,但我更喜欢属性约定——特别是在故障排除时——明确使用路由有助于我解决很多问题,尤其是当控制器变大时。我想是的,另一方面,我发现到处都有属性让我有些恼火。。。谢谢你的回答,我尝试了你的建议,但是我仍然得到同样的错误。在我出现这些错误之前,一切都运行得很好,我不知道它为什么开始出错……一定是某些东西发生了变化才触发了这些错误。在谷歌上搜索我看到的消息可能是由各种问题引起的,我想你只需排除所有问题: