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

本文关键字:初始化 错误 WebAPI 路由 直接路由 对象 | 更新日期: 2023-09-27 18:37:01

我在Visual Studio 2013上有一个Web Api项目。突然,我开始收到此错误,但没有进行任何更改:

直接路由不能使用参数"控制器"。指定一个 文本路径代替此参数,以创建到 控制器。

> 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();

当我刷新页面时,我收到另一个错误:

{ "消息": "发生错误。", "异常消息": "The 对象尚未初始化。确保 HttpConfiguration.EnsureInitialized() 在应用程序的 所有其他初始化代码之后的启动代码。 "System.InvalidOperationException", "stackTrace": " at System.Web.Http.Routing.RouteCollectionRoute.get_SubRoutes()''r' at System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(String virtualPathRoot, HttpRequestMessage request)''r' 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 }
        );
    }
}

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

请告知,任何帮助将不胜感激。

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

我的建议是从您的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/test/1

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