Dies ist meine Konfiguration für die 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 }
);.....
Und das ist meine global.asax-Klasse:
GlobalConfiguration.Configure(WebApiConfig.Register);
Immer wenn die Anwendung gestartet wird, bekomme ich diese Ausnahme:
Das Trennzeichen für die Routenvorlage '/' kann nicht nacheinander angezeigt werden. Es muss entweder durch einen Parameter oder einen Literalwert getrennt werden
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
So verwende ich das Attribut-Routing auf meinem Controller:
[RoutePrefix("v1")]
public class MarketController : ApiController
{
[HttpGet]
[Route("/marketdata/tickerinfo")]
public IHttpActionResult TickerInfo(string currencyPair)
{
Der Grund für den obigen Fehler ist, dass ich im route-Attribut für die Aktion ein zusätzliches "/" verwende. Die im obigen Controller definierte Aktion sollte wie folgt aussehen:
[HttpGet]
[Route("marketdata/tickerinfo")]
public IHttpActionResult TickerInfo(string currencyPair)
{
Ich habe den gleichen Fehler mit zwei (oder mehr) Schrägstrichen erhalten.
[Route("marketdata//tickerinfo")]
Es ist leicht zu passieren, wenn Sie die Zeichenfolge ändern.
Ich habe den gleichen Fehler erhalten, der jedoch in meinem Fall durch das Attribut ActionName
verursacht wurde.
[ActionName("")]
public void Get(string code)
Obwohl dies die Hilfeseiten brach, konnte ich den Endpunkt api/controller?code=123
noch erreichen. Wenn ich das ActionName
-Attribut entfernte, verschwand der Fehler.
Ich habe dieses Problem mit einer Kombination aus [RoutePrefix] und [Route] für eine Aktion erhalten.
[RoutePrefix("/api/my/application")]
auf die Aktion hatte ich
[HttpPost, Route("{someVariable:int}"]
Als ich [RoutePrefix("/api/my/application")]
to[RoutePrefix("api/my/application")]
änderte, war alles in Ordnung.