The route template separator character '/' cannot appear consecutively - Attribute routing issue

23,598

Solution 1

The reason for the above error is that I am using an additional '/' in the route attribute for the action. The action defined in the above controller should be as follows:

    [HttpGet]
    [Route("marketdata/tickerinfo")]
    public IHttpActionResult TickerInfo(string currencyPair)
    {

Solution 2

I've got the same error with two (or more) slashes.

[Route("marketdata//tickerinfo")]

It's easy to happen when you change the string.

Solution 3

I got the same error however it was caused by the ActionName attribute in my case.

[ActionName("")]
public void Get(string code)

Although this broke the Help pages I was still able to reach the endpoint api/controller?code=123. When I removed the ActionName attribute the error disappeared.

Solution 4

I was receiving this issue with a combination of a [RoutePrefix] and a [Route] on an action.

[RoutePrefix("/api/my/application")]

on the action I had

[HttpPost, Route("{someVariable:int}"]

When I changed: [RoutePrefix("/api/my/application")]to[RoutePrefix("api/my/application")] everything was fine.

Share:
23,598
Syed Waqas
Author by

Syed Waqas

Updated on July 09, 2022

Comments

  • Syed Waqas
    Syed Waqas almost 2 years

    The configuration has nothing to do with the error

    This is my configuration for the Web API in App_Start/WebApiConfig.cs:

    public static void Register(HttpConfiguration config)
        {
            // Web API routes
            config.MapHttpAttributeRoutes();
    
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );.....
    

    And this is my global.asax class:

    GlobalConfiguration.Configure(WebApiConfig.Register);
    

    This is the error

    But whenever the application is starting, I get this exception:

    The route template separator character '/' cannot appear consecutively. It must be separated by either a parameter or a literal value

    StackTrace:

    at System.Web.Http.Routing.RouteParser.Parse(String routeTemplate)
    at System.Web.Http.Routing.DirectRouteFactoryContext.CreateBuilder(String template, IInlineConstraintResolver constraintResolver)
    at System.Web.Http.Routing.DirectRouteFactoryContext.CreateBuilderInternal(String template)
    at System.Web.Http.Routing.DirectRouteFactoryContext.CreateBuilder(String template)
    at System.Web.Http.RouteAttribute.System.Web.Http.Routing.IDirectRouteFactory.CreateRoute(DirectRouteFactoryContext context)
    at System.Web.Http.Routing.AttributeRoutingMapper.CreateRouteEntry(String prefix, IDirectRouteFactory factory, IReadOnlyCollection`1 actions, IInlineConstraintResolver constraintResolver, Boolean targetIsAction)
    at System.Web.Http.Routing.AttributeRoutingMapper.AddRouteEntries(SubRouteCollection collector, String prefix, IReadOnlyCollection`1 factories, IReadOnlyCollection`1 actions, IInlineConstraintResolver constraintResolver, Boolean targetIsAction)
    at System.Web.Http.Routing.AttributeRoutingMapper.AddRouteEntries(SubRouteCollection collector, HttpControllerDescriptor controller, IInlineConstraintResolver constraintResolver)
    at System.Web.Http.Routing.AttributeRoutingMapper.AddRouteEntries(SubRouteCollection collector, HttpConfiguration configuration, IInlineConstraintResolver constraintResolver)
    at System.Web.Http.Routing.AttributeRoutingMapper.<>c__DisplayClass2.<>c__DisplayClass4.<MapAttributeRoutes>b__1()
    at System.Web.Http.Routing.RouteCollectionRoute.EnsureInitialized(Func`1 initializer)
    at System.Web.Http.Routing.AttributeRoutingMapper.<>c__DisplayClass2.<MapAttributeRoutes>b__0(HttpConfiguration config)
    at System.Web.Http.HttpConfiguration.EnsureInitialized()
    at System.Web.Http.GlobalConfiguration.Configure(Action`1 configurationCallback)
    at Sample.Rest.WebHost.WebApiApplication.Application_Start() in d:\sample\Sample.Rest.WebHost\Global.asax.cs:line 33
    

    The error is caused by the Route attribute

    This is how I am using attribute routing on my controller:

    [RoutePrefix("v1")]
    public class MarketController : ApiController
    {
        [HttpGet]
        [Route("/marketdata/tickerinfo")]
        public IHttpActionResult TickerInfo(string currencyPair)
        {
    
  • Efreeto
    Efreeto over 3 years
    It's worth noting you can get this error from OTHER routes in the same controller... This had me baffled for a while.