0
我通過Web API曝光功能,並且我要揭露的網址是例如:定義Web API路線
- /API /機構(組織名單回報(GET))
- /api/organizations?$ top = 2(返回由oData(GET)過濾的組織列表)
- /api/organizations/2(返回組織ID爲2(GET)的詳細信息)
- /api/organizations /添加機構(向機構添加新機構(POST))
- /API /組織/ removeinstitution(除去機構(POST))
爲了做到這一點,我不得不改變路由在WebApiConfig類,如:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new { id = @"\d*" }
);
config.Routes.MapHttpRoute(
name: "SpecificActionsRoute",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
這似乎工作,但我想知道這是否是定義路線的最佳方式。我需要兩條路線嗎?有沒有更好的方法?
編輯:是完整的,我必須說,我也使用路由屬性,如:
[GET("organizations")]
public IQueryable<OrganizationSummaryViewModel> Get(ODataQueryOptions<Organization> oDataQuery)
{
}
[GET("organizations/{id}")]
public OrganizationDetailsViewModel Get(int id)
{
}
[POST("organizations/addinstitutiontoorganization")]
public AddInstitutionToOrganizationCommandResult AddInstitutionToOrganization(AddInstitutionToOrganizationCommand command)
{
}
[POST("organizations/anotheroperation")]
public AnotherOPerationCommandResult AnotherOperation(AnotherOperationCommand command)
{
}
編輯2:我結束了刪除屬性的路由,而只是不停地在WebApiConfig兩個模板化路線。
您的第一條路線是否需要「行動」的默認值? – asymptoticFault
第一個路由會自動映射到Get或Get(int id)。我認爲這是因爲它是一個ApiController? –
還有一種定義路由的替代方法,它被稱爲屬性路由。我需要它時,我必須定義3個級別。看看這個:http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2 – alfoks