1

我有一个通过 OWIN 中间件托管的 Web API 2 项目。一切正常,我可以按预期调用我的 API。但是,我的 WebApiConfig 定义默认路由如下:

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

因此,我必须使用类似于以下内容的 URL 调用我的 API:/api/values/dosomething

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

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

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

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

  1. 为什么会发生这种情况?
  2. 有没有办法修改这种行为?

提前致谢!

4

1 回答 1

6

我也遇到了同样的问题。下面是我的工作代码。

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

当我在方法之前更改路线时

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

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

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

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

于 2017-02-08T22:03:30.147 回答