1

假设我有如下路线:

/api/v1/{organisationId}/resource/{resourceId}

由于可能有许多不同类型的资源挂在一个组织上,我想要一种处理 organizationId 的通用方法。

我想做的是创建一个具有 OrganisationId 属性的基本控制器(显然是从 ApiController 继承的)。

有没有办法让 WebApi 将 organizationId 路由参数传递给控制器​​上的属性,而不是传递给 action 方法的参数?

4

2 回答 2

3

这个怎么样?

public int OrganisationId
{
    get
    {
        return Convert.ToInt32(Request.GetRouteData().Values["organisationId"]);
    }
}

这没有使用模型绑定层,并且假设它organisationId会出现在路由数据中。它比 Web API 模型绑定提供的简单且灵活性稍差。

于 2013-04-08T21:17:48.710 回答
1

从属性获取器中读取路由的缺点是单元测试可能是一个挑战。另一种可能的方法是探索实现您自己的设置 OrganizationId 属性的 IHttpControllerActivator。是的,要使其工作,您将需要一个基本控制器或在单个控制器中定义的属性,如果不是从基本控制器派生的。如果您使用 base,您可以将 IHttpController 类型转换为 base 并设置属性。或者你可以诉诸反思。

于 2013-04-09T03:07:40.657 回答