C# 使用C webApi的Swagger UI正在将我的头参数更改为查询参数?

C# 使用C webApi的Swagger UI正在将我的头参数更改为查询参数?,c#,asp.net-web-api,http-headers,swagger,C#,Asp.net Web Api,Http Headers,Swagger,因此,我决定使用此方法,因为它是为api调用添加自定义头的最简单方法,例如: [HttpPost] [Route("something")] public async Task<somethingObject> DoSomething([Microsoft.AspNetCore.Mvc.FromHeader(Name = "deviceGuid")] string deviceGuid) { var somethingObject= await doSomethingWith

因此,我决定使用此方法,因为它是为api调用添加自定义头的最简单方法,例如:

[HttpPost]
[Route("something")]
public async Task<somethingObject> DoSomething([Microsoft.AspNetCore.Mvc.FromHeader(Name = "deviceGuid")] string deviceGuid)
{
    var somethingObject= await doSomethingWithDevice(deviceGuid)
    return somethingObject;
}

这个预期的结果是一个字段,我可以输入DeVice GuID,Sigggg应该把它看作一个头。 目前的问题是,Swagger将其视为一个查询,而不是一个标题:


有什么线索我可以解决这个问题吗?

我不认为这是你正在使用的招摇过市的实现,我知道FromHeader。 你能做的,就是这样; 制作一个OperationFilter,将ParameterType更改为Header,如下所示;-注意,我在一本书中找到了这个


我最终使用了if apisdescription.RelativePath.Contains/registration{add custom headers}你也可以这么做-当你只需要修复一条路由时效果非常好:是的,我有2-3条路由,所以我最终使用了3个if来检查路由,这是一个快速而友好的修复,而不是永久的修复!
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";
        }
    }
}