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);
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
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)
{
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)
{
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.
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.
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.