路线模板分隔符' /'将操作添加到默认路由时,不能连续出现

时间:2016-06-03 09:32:46

标签: asp.net-web-api asp.net-web-api2 swagger swashbuckle asp.net-web-api-helppages

我有一个通过OWIN中间件托管的Web API 2项目。一切都运行得很好,我可以按预期调用我的API。但是,我的WebApiConfig定义了默认路由,如下所示:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

因此,我必须使用类似于/api/values/dosomething

的网址来调用我的API

这对我有用,直到我决定记录我的API。为此,我首先尝试使用不起作用的WebAPI Help Page package。然后我想我应该尝试Swashbuckle Swagger并看看这是否有助于我完全避免这个问题,但不幸的是,在这两种情况下我都遇到了同样的错误:

  

路线模板分隔符' /'不能出现   连续。它必须由参数或文字分隔   值。参数名称:routeTemplate

在尝试了一些事情之后,结果发现当更改路径模板并删除{action}部分时,错误消失了。但是,我无法真正做到这一点,因为整个项目都假定URL中包含动作方法名称。

所以无论如何,我想知道以下内容:

  1. 为什么会发生这种情况?
  2. 有没有办法修改此行为?
  3. 提前致谢!

1 个答案:

答案 0 :(得分:5)

我收到了同样的问题。以下是我的工作代码。

[RoutePrefix("api/User")]
public class UserController : ApiController
{
    [Route("login")]
    public IHttpActionResult Get()
    {       }
}

当我从

方法之前改变路线时
[Route("login")]
public IHttpActionResult Get()
{       }

[Route("/login")]
public IHttpActionResult Get()
{       }

我得到了同样的错误。  如果您在控制器的任何方法之前添加额外的 / (如果第一次没有调用它),它将会生成。

我不确定你的病情。如果有人得到帮助,我会分享我的情况。