これは、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)
{
上記のエラーの理由は、アクションのルート属性で追加の「/」を使用しているためです。上記のコントローラーで定義されるアクションは次のようになります。
[HttpGet]
[Route("marketdata/tickerinfo")]
public IHttpActionResult TickerInfo(string currencyPair)
{
2つ(またはそれ以上)のスラッシュで同じエラーが発生しました。
[Route("marketdata//tickerinfo")]
文字列を変更すると簡単に起こります。
私は同じエラーを受け取りましたが、私の場合はActionName
属性が原因でした。
[ActionName("")]
public void Get(string code)
これによりヘルプページが破損しましたが、エンドポイントに到達することはできましたapi/controller?code=123
。 ActionName
属性を削除すると、エラーが消えました。
アクションで[RoutePrefix]と[Route]の組み合わせでこの問題を受信していました。
_[RoutePrefix("/api/my/application")]
_
actionで
_[HttpPost, Route("{someVariable:int}"]
_
変更したとき:[RoutePrefix("/api/my/application")]
to[RoutePrefix("api/my/application")]
すべてが順調でした。