更改WebAPI中的默认路由

时间:2015-09-16 22:48:56

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

成为新的并从轨道上的红宝石过渡。我想了解如何更改默认路由以使用自定义路由。

例如,WebApiConfig.cs中的当前路线如下:

config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new {id = RouteParameter.Optional}

所以我在控制器中配置的URL GET api是:

https://localhost:44300/api/Controller?type=FirstType

我的控制器中定义的相应方法是:

public HttpResponseMessage GetControllerByType(string type)

使用URL调用WEB api时,执行与上述操作相同的更改是什么:

https://localhost:44300/api/Controller/FirstType

1 个答案:

答案 0 :(得分:3)

假设您正在使用WebAPI 2,您可以使用控制器内操作的属性创建自定义路由。

将以下内容添加到WebApiConfig.cs的Register方法中:

config.MapHttpAttributeRoutes();

应在您上面发布的默认路由配置之前添加上述内容。

然后在您的控制器中,您可以使用注释来描述路线:

[Route("controller/{type}")]
[HttpGet]
public HttpResponseMessage GetControllerByType(string type)

括号内的值表示通过名称绑定到方法参数的变量。

您还可以自己注释类,使其具有适用于该控制器中所有方法的前缀:

[RoutePrefix("stuff")]
public class MyController : ApiController
{
    [Route("myAction/{id}")] //route to this is via /stuff/myAction/{id}
    [HttpGet]
    public HttpResponseMessage MyMethod(string id)  
    { ... }
}

唯一的'陷阱'是查询字符串不应该在路由模板中,它们由方法签名中的可选参数(具有默认值的参数)表示,它们在路径模板字符串中也没有可选的注释。 (即:"myAction/{id:string?}"必须在签名中具有默认值,但所有其他不具有默认值的 id 的参数都可以通过查询字符串进行分配)

您未提供使用注释的路由模板的任何内容都将回退到使用WebApiConfig中指定的默认路由,默认情况下为" / api / controller_name / action_name /"

以下是使用您可以设置的属性的所有自定义路由的精彩教程:Attribute Routing in ASP.NET WebAPI 2