假设我有如下路线:
/api/v1/{organisationId}/resource/{resourceId}
由于可能有许多不同类型的资源挂在一个组织上,我想要一种处理 organizationId 的通用方法。
我想做的是创建一个具有 OrganisationId 属性的基本控制器(显然是从 ApiController 继承的)。
有没有办法让 WebApi 将 organizationId 路由参数传递给控制器上的属性,而不是传递给 action 方法的参数?
假设我有如下路线:
/api/v1/{organisationId}/resource/{resourceId}
由于可能有许多不同类型的资源挂在一个组织上,我想要一种处理 organizationId 的通用方法。
我想做的是创建一个具有 OrganisationId 属性的基本控制器(显然是从 ApiController 继承的)。
有没有办法让 WebApi 将 organizationId 路由参数传递给控制器上的属性,而不是传递给 action 方法的参数?
这个怎么样?
public int OrganisationId
{
get
{
return Convert.ToInt32(Request.GetRouteData().Values["organisationId"]);
}
}
这没有使用模型绑定层,并且假设它organisationId
会出现在路由数据中。它比 Web API 模型绑定提供的简单且灵活性稍差。
从属性获取器中读取路由的缺点是单元测试可能是一个挑战。另一种可能的方法是探索实现您自己的设置 OrganizationId 属性的 IHttpControllerActivator。是的,要使其工作,您将需要一个基本控制器或在单个控制器中定义的属性,如果不是从基本控制器派生的。如果您使用 base,您可以将 IHttpController 类型转换为 base 并设置属性。或者你可以诉诸反思。