C#WebAPI限制路由

时间:2018-12-06 04:12:42

标签: c# asp.net-web-api

在一个webapi项目的WebAPIConfig.cs中,添加了2条路由

[HttpGet]
public string Get(int id)
{
    return "get";
}
[HttpGet]
[ActionName("ByWait")]
public string[] ByWait(int id)
{
    return "bywait";
}

我尝试创建一个包含以下功能的apiController

{{1}}

我希望 请求/ api / controllername / 1234返回“ get”,并且 请求/ api / controllername / bywait / 1234返回“ bywait”。

但是,实际结果是 / api / controllername / 1234 >>引发异常找到多个与请求匹配的动作 / api / controllername / bywait / 1234 >>“通过等待”

但是可以解决此问题吗? s.t如何限制功能ByWait仅接受包含操作的请求,以便仅响应/ api / controllername / bywait / 1234而忽略/ api / controllername / 1234

还是有其他更好的解决方案?

谢谢

1 个答案:

答案 0 :(得分:0)

首先,您可以更改WebApiConfig:

config.Routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{action}/{id}"
);

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

然后是控制器:

[HttpGet]
public string Get()
{
    return "get-default";
}

[HttpGet]
public string Get(int id)
{
    return "get" + id;
}

[HttpGet]
[Route("api/values/bywait/{id}")]
public string ByWait(int id)
{
    return "bywait";
}