web-dev-qa-db-fra.com

Le caractère séparateur de modèle de route '/' ne peut pas apparaître consécutivement - Problème de routage d'attribut

La configuration n'a rien à voir avec l'erreur

Voici ma configuration pour l'API Web dans 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 }
        );.....

Et voici ma classe global.asax:

GlobalConfiguration.Configure(WebApiConfig.Register);

C'est l'erreur

Mais chaque fois que l'application démarre, j'obtiens cette exception:

Le caractère séparateur de modèle de route '/' ne peut pas apparaître consécutivement. Il doit être séparé par un paramètre ou une valeur littérale

Trace de la pile: 

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

L'erreur est causée par l'attribut Route

Voici comment j'utilise le routage d'attribut sur mon contrôleur:

[RoutePrefix("v1")]
public class MarketController : ApiController
{
    [HttpGet]
    [Route("/marketdata/tickerinfo")]
    public IHttpActionResult TickerInfo(string currencyPair)
    {
32
Waqas Shah

La raison de l'erreur ci-dessus est que j'utilise un '/' supplémentaire dans l'attribut route pour l'action. L'action définie dans le contrôleur ci-dessus doit être la suivante:

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

J'ai la même erreur avec deux (ou plus) barres obliques.

[Route("marketdata//tickerinfo")]

Il est facile de se produire lorsque vous changez de chaîne.

4
Setar

J'ai eu la même erreur, mais elle a été causée par l'attribut ActionName dans mon cas.

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

Bien que cela ait cassé les pages d'aide, j'ai quand même pu atteindre le noeud final api/controller?code=123. Lorsque j'ai supprimé l'attribut ActionName, l'erreur a disparu.

0
fireydude

Je recevais ce problème avec une combinaison d'un [RoutePrefix] et d'un [Route] sur une action.

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

sur le action j'avais

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

Quand j'ai changé: [RoutePrefix("/api/my/application")]to[RoutePrefix("api/my/application")] tout allait bien.

0
Zach Wymer