webapi MapHttpRoute中的多个方法

时间:2017-11-09 17:48:06

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

在asp.net核心中使用路由注释我可以轻松地执行以下操作

[HttpGet("ByID/{id}")]
public int GetByID(int id)
{
    return 5;
}

[HttpGet("ByName/{id}")]
public string GetByName(string name)
{
    return "neil";
}

但是,在控制器中使用相同的方法,如何使用WebApiConfig文件中的非注释方式(即.net框架),即我将如何添加到下面以使其适用于上述示例

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

作为奖励,有人可以告诉我如何将两个GET项目的URL映射相同,仅按类型区分,例如。

[HttpGet("{id}")]
[HttpGet("{name}")]

其中一个是整数,一个是字符串 - 换句话说,与上面相同但不必指定两个单独的url段(ByID,ByName)?

1 个答案:

答案 0 :(得分:1)

您可以使用路径约束来区分相同路径的操作。

[RoutePrefix("api/somepath")]
public class MyController : ApiController {

    //Matches GET api/somepath/5
    [HttpGet]
    [Route("{id:int}")]
    public int GetByID(int id) {
        return id;
    }

    //Matches GET api/somepath/neil
    [HttpGet]
    [Route("{name}")]
    public string GetByName(string name) {
        return name;
    }
}

注意默认值是字符串,这就是第二个操作中没有的原因。