C# WebApi2属性路由URL格式

C# WebApi2属性路由URL格式,c#,asp.net-web-api,asp.net-web-api2,C#,Asp.net Web Api,Asp.net Web Api2,我想和你一起去 api/prefix/{controller}/{id}/{param} 相对于 api/prefix?Controller={controller}&Id={id}&Param={param} 换句话说,我更喜欢没有名称/值参数的URL 控制器的定义如下: /// <summary> /// Employee API /// </summary> [System.Web.Mvc.RoutePrefix("api/employee")]

我想和你一起去

api/prefix/{controller}/{id}/{param}
相对于

api/prefix?Controller={controller}&Id={id}&Param={param}
换句话说,我更喜欢没有名称/值参数的URL

控制器的定义如下:

/// <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);
    }
}
//
///员工API
/// 
[System.Web.Mvc.RoutePrefix(“api/employee”)]
公共类EmployeeController:ApiController
{
///
///从提供的员工ID CSV返回员工集合
/// 
///员工ID的CSV。传递“全部”以包括所有员工。默认为“全部”。
///要返回的行数。默认为所有行
///要返回的页码。默认为第0页
///数不清
[System.Web.Mvc.Route(“id/{EmployeeIDs:alpha?}/{PageSize:int?}/PageNum:int?}”)]
public IHttpActionResult getEmployeesByIds(字符串EmployeeIds=“ALL”,int PageSize=0,int PageNumber=0)
{
EmployeeDb=newemployeedb();
IEnumerable e=db.getEmployeesById(EmployeeId、PageSize、PageNumber);
返回Ok(e);
}
}

如何控制URL格式?

您使用的是System.Web.Mvc.RoutePrefix和System.Web.Mvc.Route属性,但您继承自ApicController,因此这是一个Web API控制器,而不是Mvc控制器。
您可以尝试切换到System.Web.Http.RoutePrefix和System.Web.Http.Route吗?

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

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

RoutePrefix应该继承自
System.Web.Http

与System.Web.Http一样,它无法解析您的路由


这有很好的属性路由信息。

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

RoutePrefix应该继承自
System.Web.Http

与System.Web.Http一样,它无法解析您的路由


这有很好的属性路由信息。

不清楚你在问什么。请澄清您的具体问题或添加其他详细信息,以突出显示您所需的内容。正如目前所写的,很难准确说出你在问什么。为什么
controller/action/
controller=mycontroller&action=myAction]干净得多……
@Ric确切地说,我想要前者,我得到后者。你应该使用web api的属性路由,不清楚你在问什么。请澄清您的具体问题或添加其他详细信息,以突出显示您所需的内容。正如目前所写的,很难准确说出你在问什么。为什么
controller/action/
controller=mycontroller&action=myAction]干净得多。…
@Ric确切地说,我想要前者,我得到后者。你应该使用web api的属性路由好捕获,谢谢!我做了此更改,现在收到一条错误消息,路由模板不能以“/”或“~”开头。我的模板没有一个是以非alpha开头的,所以我试图找到它。你的URL有输入错误。参数名称必须与URL中的templateparts完全匹配,并且缺少{before PageNum。请尝试此[Route(“id/{EmployeeIds:alpha?}/{PageSize:int?}/{PageNumber:int?}”)]很好,谢谢!我做了此更改,现在收到一条错误消息,路由模板不能以“/”或“~”开头。我的模板中没有一个是以非alpha开头的,因此正在尝试跟踪它。URL中有输入错误。参数名称必须与URL中的templateparts完全匹配,并且缺少{before PageNum。请尝试此[路由(“id/{EmployeeIds:alpha?}/{PageSize:int?}/{PageNumber:int?}”)]