首页 > 解决方案 > 自定义属性标记自定义标头值的 API 方法

问题描述

我正在构建一个 API(我们将其称为new api),其行为类似于另一个 Rest-API 的 api 网关(我们将其称为old api)。在我中,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)。

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

解决方案


应该可以通过编写您自己的模型绑定器(如 ASP.NET Core 中的自定义模型绑定中所述)来创建一个自定义绑定器,该绑定器映射不在URL路径中的参数,也没有要从标头中提取的属性。

更新

通过提供自定义IRequestBuilder(开箱即用的实现似乎是RequestBuilderImplementation),可能还有一种方法可以在改装中做到这一点。

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

希望能帮助到你!


推荐阅读