WebApi2属性路由URL格式

时间:2017-03-01 14:59:05

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

我想用

路由
api/prefix/{controller}/{id}/{param}

而不是

api/prefix?Controller={controller}&Id={id}&Param={param}

换句话说,我更喜欢没有名称/值参数的网址。

控制器的定义如下:

/// <summary>
/// Employee API
/// </summary>
[System.Web.Mvc.RoutePrefix("api/employee")]
public class EmployeeController : ApiController
{
    ///<summary>
    /// Returns a collection of employees from a supplied CSV of EmployeeIds
    /// </summary>
    /// <paramref name="EmployeeIds">CSV of EmployeeIds. Pass "ALL" to include all employees. Defaults to "ALL".</paramref>
    /// <paramref name="PageSize">Number of rows to return. Defaults to all rows</paramref>
    /// <paramref name="PageNumber">Number of the page to return. Defaults to Page 0</paramref>
    /// <returns>IEnumerable<Employee></returns>
    [System.Web.Mvc.Route("id/{EmployeeIDs:alpha?}/{PageSize:int?}/PageNum:int?}")]
    public IHttpActionResult getEmployeesByIds(string EmployeeIds = "ALL",int PageSize = 0,int PageNumber = 0)
    {
        EmployeeDb db = new EmployeeDb();
        IEnumerable<Employee> e = db.getEmployeesById(EmployeeIds, PageSize, PageNumber);
        return Ok(e);
    }
}

如何控制网址格式的方式?

2 个答案:

答案 0 :(得分:1)

您正在使用System.Web.Mvc.RoutePrefix和System.Web.Mvc.Route属性,但您继承自ApiController,因此这是一个Web API控制器,而不是MVC控制器。 你能尝试切换到System.Web.Http.RoutePrefix和System.Web.Http.Route吗?

答案 1 :(得分:1)

System.Web.Http一个用于Web API; System.Web.Mvc一个用于以前的MVC版本。 MVC是Web应用程序,Web API是HTTP服务。

RoutePrefix应该从System.Web.Http继承。

由于ApiController来自System.Web.Http,因此无法解析您的路线。

ms-doc有关于属性路由的详细信息。