web-dev-qa-db-ja.com

ルートテンプレートの区切り文字「/」を連続して使用することはできません-属性ルーティングの問題

構成はエラーとは関係ありません

これは、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

エラーはルート属性が原因です

これは、コントローラーで属性ルーティングを使用する方法です。

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

上記のエラーの理由は、アクションのルート属性で追加の「/」を使用しているためです。上記のコントローラーで定義されるアクションは次のようになります。

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

2つ(またはそれ以上)のスラッシュで同じエラーが発生しました。

[Route("marketdata//tickerinfo")]

文字列を変更すると簡単に起こります。

4
Setar

私は同じエラーを受け取りましたが、私の場合はActionName属性が原因でした。

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

これによりヘルプページが破損しましたが、エンドポイントに到達することはできましたapi/controller?code=123ActionName属性を削除すると、エラーが消えました。

0
fireydude

アクションで[RoutePrefix]と[Route]の組み合わせでこの問題を受信して​​いました。

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

action

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

変更したとき:[RoutePrefix("/api/my/application")] to[RoutePrefix("api/my/application")]すべてが順調でした。

0
Zach Wymer