【问题标题】:The route template separator character '/' cannot appear consecutively - Attribute routing issue路由模板分隔符“/”不能连续出现 - 属性路由问题
【发布时间】:2015-07-21 01:58:48
【问题描述】:

配置与错误无关

这是我在 App_Start/WebApiConfig.cs 中对 Web API 的配置:

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

【问题讨论】:

    标签: c# asp.net .net asp.net-web-api asp.net-web-api2


    【解决方案1】:

    上述错误的原因是我在操作的路由属性中使用了额外的“/”。上述控制器中定义的动作应该如下:

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

    【讨论】:

    • 值得注意的是,您可以从同一控制器中的其他路由中获取此错误...这让我困惑了一段时间。
    【解决方案2】:

    两个(或更多)斜线出现相同的错误。

    [Route("marketdata//tickerinfo")]
    

    更改字符串时很容易发生。

    【讨论】:

      【解决方案3】:

      我遇到了同样的错误,但在我的情况下它是由 ActionName 属性引起的。

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

      虽然这破坏了帮助页面,但我仍然能够到达端点api/controller?code=123。当我删除 ActionName 属性时,错误消失了。

      【讨论】:

        【解决方案4】:

        我收到了这个问题,其中包含 [RoutePrefix] 和 [Route] 的组合。

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

        关于我的行动

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

        当我改变时:[RoutePrefix("/api/my/application")]to[RoutePrefix("api/my/application")] 一切都很好。

        【讨论】:

          猜你喜欢
          • 2016-10-03
          • 1970-01-01
          • 2018-10-05
          • 1970-01-01
          • 2017-09-20
          • 1970-01-01
          • 2017-02-21
          • 2021-08-18
          • 1970-01-01
          相关资源
          最近更新 更多