【问题标题】:Web API routing in Sitecore 8.2Sitecore 8.2 中的 Web API 路由
【发布时间】:2017-11-29 05:28:18
【问题描述】:

我使用快速迁移工具将一个 sitecore 7.2 应用程序迁移到了 sitecore 8.2。迁移后 Web API 路由停止工作。我正在使用下面给定的方法来映射路由

 [UsedImplicitly]
        public class ConfigRegister
        {
            /// <summary>
            /// Startup method to bind all configurations for site core pipeline.
            /// </summary>
            /// <param name="args"></param>
            public virtual void Process(PipelineArgs args)
            { RouteConfig.RegisterRoutes(RouteTable.Routes);
     }
        }

然后使用以下代码sn-p注册它

public static void Register(HttpConfiguration config)
        {
         config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute(
                name: "ControllersApi",
                routeTemplate: "WebApi/CustomerPortal/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }

我收到错误名为“MS_attributerouteWebApi”的路由已在路由集合中。路由名称必须是唯一的。 参数名称:名称。

但是当我评论这一行时

config.MapHttpAttributeRoutes();

我遇到了错误 {"Message":"发生错误。","ExceptionMessage":"对象尚未初始化。确保在应用程序的启动代码中在所有其他初始化代码之后调用 HttpConfiguration.EnsureInitialized()。","ExceptionType ":"System.InvalidOperationException","StackTrace":" 在 System.Web.Http.Routing.RouteCollectionRoute.get_SubRoutes()\r\n 在 System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(String virtualPathRoot, HttpRequestMessage 请求) \r\n 在 System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase httpContext)"}

非常感谢您为解决此问题提供的帮助

【问题讨论】:

  • 我添加了 HttpConfiguration.EnsureInitialized();在 global.asax 但没有解决问题
  • 您的 API 使用的是属性路由还是普通路由?
  • @Newbie Hi 你解决了这个问题吗?如果是这样,你能告诉我怎么做吗?因为我遇到了同样的问题
  • 你最终会做什么来解决这个问题?

标签: asp.net-web-api sitecore sitecore-mvc sitecore8.2


【解决方案1】:

我假设你在初始化管道下有这个,对吗?

这是我们之前做过的,适用于 8.2:

    public void Process(PipelineArgs args)
    {
        HttpConfiguration httpConfig = GlobalConfiguration.Configuration;
        httpConfig.Routes.MapHttpSessionRoute("WebApiRoute", "webapi/{controller}/{action}/{id}", true, new { id = RouteParameter.Optional });          
    }

如果上述方法不起作用,试试这个(每个栖息地):

public void Process(PipelineArgs args)
{
     RouteTable.Routes.MapHttpRoute("Feature.Demo.Api", "api/demo/{action}", new
        {
           controller = "Demo"
        });
}

【讨论】:

  • 嗨,马可,是的。它在初始化管道下。我用命名空间 System.Web.Http 尝试了你的代码 sn-p,但 httpConfig.Route 没有 MapHttpSessionRoute 的定义。或者我尝试了 httpConfig.Routes.MapHttpRoute 但没有工作
  • 我已更新我的答案以包含来自 Habitat 的样本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
  • 1970-01-01
  • 2015-11-06
  • 2016-07-21
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多