用于标记自定义标头值的API方法的自定义属性

时间:2018-11-21 09:04:54

标签: c# asp.net-core .net-core asp.net-core-webapi

我正在构建一个API(将其称为new api),其行为类似于通往另一个Rest-API(将其称为old api的api-gateway)。 在我的old api中,我正在检查请求标头(像这样X-Some-Custom-Header)并返回对该标头的响应。考虑该标头类似于本地化。 我想用一种属性标记我的new api方法,这样我就不需要像这样指定每个方法了:

[HttpGet({id})]
public IActionResult GetSomeValue([FromHeader] xSomeCustomHeader, int id){
    //some logical codes here
}

我知道必须有一种整洁的方法来执行此操作,显然您可以使用[Authorize()]属性来执行类似的操作。

通过这种方式,我既不需要使用Resources也不需要配置RequestLocalizationOptions。我只想获取该值并将其传递给内部http请求(即使用Refit来调用old api)。

1 个答案:

答案 0 :(得分:0)

应该可以按照Custom Model Binding in ASP.NET Core所述编写自己的 Model Binder 来创建一个自定义的绑定器,该映射器映射不在 URL 路径中的参数也没有从标头中提取属性。

更新

通过提供自定义的 IRequestBuilder (现成的实现似乎是RequestBuilderImplementation),也许还有一种方法可以进行改装。

一旦有了适合您需要的自定义实现,您就应该能够通过RestServiceFor<T>(HttpClient client, IRequestBuilder<T> builder)重载告诉改用它。

希望有帮助!