修改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中的默认路由

假设你使用的是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