it-roy-ru.com

Символ-разделитель шаблона маршрута '/' не может появляться последовательно - проблема маршрутизации атрибута

Конфигурация не имеет ничего общего с ошибкой

Это моя конфигурация для веб-API в 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 }
        );.....

И это мой класс global.asax:

GlobalConfiguration.Configure(WebApiConfig.Register);

Это ошибка

Но всякий раз, когда приложение запускается, я получаю это исключение:

Символ-разделитель шаблона маршрута '/' не может появляться последовательно. Он должен быть разделен либо параметром, либо литеральным значением.

Трассировки стека: 

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

Ошибка вызвана атрибутом Route

Вот как я использую атрибутную маршрутизацию на моем контроллере:

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

Причиной вышеуказанной ошибки является то, что я использую дополнительный «/» в атрибуте маршрута для действия. Действие, определенное в вышеприведенном контроллере, должно быть следующим:

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

У меня та же ошибка с двумя (или более) косыми чертами.

[Route("marketdata//tickerinfo")]

Это легко случается, когда вы меняете строку.

4
Setar

Я получил ту же ошибку, однако она была вызвана атрибутом ActionName в моем случае.

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

Хотя это сломало страницы справки, я все же смог достичь конечной точки api/controller?code=123. Когда я удалил атрибут ActionName, ошибка исчезла.

0
fireydude

Я получал эту проблему с комбинацией [RoutePrefix] и [Route] в действии.

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

на действие у меня было

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

Когда я изменил: [RoutePrefix("/api/my/application")]to[RoutePrefix("api/my/application")] все было хорошо.

0
Zach Wymer