成为新的并从轨道上的红宝石过渡。我想了解如何更改默认路由以使用自定义路由。
例如,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
答案 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