路由模板分隔符“/”不能连续出现 - 属性路由问题

43

配置与错误无关

这是我在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)
    {
5个回答

67
上述错误的原因是在action的路由属性中使用了额外的'/'。上述控制器中定义的action应该如下所示:
    [HttpGet]
    [Route("marketdata/tickerinfo")]
    public IHttpActionResult TickerInfo(string currencyPair)
    {

值得注意的是,您可以从同一控制器中的其他路由获得此错误... 这让我困惑了一段时间。 - Efreeto

9

我遇到了与两个(或更多)斜杠相同的错误。

[Route("marketdata//tickerinfo")]

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

1
我在一个动作上同时使用了[RoutePrefix]和[Route],出现了这个问题。
[RoutePrefix("/api/my/application")]

操作时我有

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

当我将:[RoutePrefix("/api/my/application")] 改为 [RoutePrefix("api/my/application")] 时,一切正常。

1

我遇到了相同的错误,但这是由于ActionName属性引起的。

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

尽管这破坏了帮助页面,但我仍然能够访问终端点api/controller?code=123。当我移除了ActionName属性时,错误消失了。

0

由于不同控制器中存在相同的 [Route("YOUR_FUNCTION_ENTRY_POINT)] 条目,导致出现错误。

请确保您的 MVC API 中没有重复的条目。


这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Lajos Arpad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接