修改WebAPI中的默认路由
本文关键字:默认 路由 WebAPI 修改 | 更新日期: 2023-09-27 18:13:01
刚从ruby on rails过渡过来。我想知道如何将默认路由更改为使用自定义路由。
例如,我的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
假设你使用的是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/"
这里有一个很棒的教程,教你如何使用属性设置自定义路由:. NET WebAPI 2