c# - 使用 C# webApi 的 Swagger UI 正在将我的标头参数更改为查询参数?
问题描述
所以我决定使用这种方法,因为它是为我的 api 调用添加自定义标头最简单的方法,例如:
[HttpPost]
[Route("something")]
public async Task<somethingObject> DoSomething([Microsoft.AspNetCore.Mvc.FromHeader(Name = "deviceGuid")] string deviceGuid)
{
var somethingObject= await doSomethingWithDevice(deviceGuid)
return somethingObject;
}
预期的结果是 Swagger 中的一个字段,我可以在其中输入 deviceGuid 并且 Swagger 应该将其视为标题。
手头的问题是 Swagger 将其视为查询而不是标题:
有什么线索可以解决这个问题吗?
解决方案
我不认为 SwashBuckle(我猜这是您正在使用的招摇实现)知道 FromHeader。
你能做的,是这个;
制作一个将 ParameterType 更改为 Header 的 OperationFilter - 类似于以下内容;-注意我在这个要点中找到了这个。
public class FromHeaderAttributeOperationFilter : IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
foreach (var httpParameterDescriptor in apiDescription.ActionDescriptor.GetParameters().Where(e => e.GetCustomAttributes<FromHeaderAttribute>().Any()))
{
var parameter = operation.parameters.Single(p => p.name == httpParameterDescriptor.ParameterName);
parameter.name = httpParameterDescriptor.GetCustomAttributes<FromHeaderAttribute>().Single().HeaderName;
parameter.@in = "header";
}
}
}
推荐阅读
- flutter - Flutter firebase_admob 给出未注册的服务未处理异常
- r - 删除 R 中符号(连字符)后的空格
- sql - BigQuery 中的计算返回 E-4 SQL
- python - 带有标题和描述标签的 SEO 和 Django
- javascript - 省略 javascript 中另一个数组中存在的对象中的键
- excel - Excel VBA问题排序+插入值
- mysql - 如果有其他表的值,则更新表“visita”
- java - (Apache Beam) 无法增加执行程序内存 - 尽管使用了多个设置,但仍固定为 1024M
- android - Android 意图过滤器无法使用 pathPrefix / pathPattern 找到与我的通用链接的正确匹配项
- utc - 如何在skyfield v1.26中使用ts.now().utc_strftime("%H:%M:%S.%f")