_web-api
_のすべてのメソッドに自動的に追加されるリクエストヘッダーパラメーターを追加する方法を探しましたが、明確なものが見つかりませんでした。
検索中に、メソッドOperationFilter()
がそれについて何かしなければならないことがわかりました。
はい、あなたはIOperationFilter
から継承することでそれを行うことができます
GitHubで答えを見つけることができます: AddRequiredHeaderParameter
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Swashbuckle.AspNetCore.Swagger;
using Swashbuckle.AspNetCore.SwaggerGen;
public class AddRequiredHeaderParameter : IOperationFilter
{
public void Apply(Operation operation, OperationFilterContext context)
{
if (operation.Parameters == null)
operation.Parameters = new List<IParameter>();
operation.Parameters.Add(new NonBodyParameter
{
Name = "X-User-Token",
In = "header",
Type = "string",
Required = false
});
}
}
次に、SwaggerConfig.cs
ファイルを作成し、AddSwaggerGen
セクションに以下を追加します。
c.OperationFilter<AddRequiredHeaderParameter>();
再構築し、お楽しみください。
私はこれをわずかに異なる方法で行わなければなりませんでしたが、理由はわかりません。ヘッダー値を追加するために私がしたことは次のとおりです。
これは私のswagger設定に追加されました:
c.OperationFilter<AddRequiredHeaderParameter>();
そして、これはクラスでした:
public class AddRequiredHeaderParameter : IOperationFilter
{
public void Apply(Operation operation, OperationFilterContext context)
{
operation.Parameters.Add(new NonBodyParameter
{
Name = "X-MYHEADER",
In = "header",
Type = "string",
Required = false
});
}
}
ユーザー「G T」が書いたものは正しいですが、Swagger 5では機能しません。いくつかの新しい変更があります:From: "Operation" to: "OpenApiOperation"。 From: "IParameter" to: "OpenApiParameter"。 From: "NonBodyParameter" to: "OpenApiParameter"。そして最も重要なのは、「Type = "string"」から「Schema = new OpenApiSchema {Type = "String"}」です。
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc.Authorization;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace MyAPI
{
public class AuthorizationHeaderParameterOperationFilter: IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
var filterPipeline = context.ApiDescription.ActionDescriptor.FilterDescriptors;
var isAuthorized = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is AuthorizeFilter);
var allowAnonymous = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is IAllowAnonymousFilter);
if (isAuthorized && !allowAnonymous)
{
if (operation.Parameters == null)
operation.Parameters = new List<OpenApiParameter>();
operation.Parameters.Add(new OpenApiParameter
{
Name = "Authorization",
In = ParameterLocation.Header,
Description = "access token",
Required = true,
Schema = new OpenApiSchema
{
Type = "String",
Default = new OpenApiString("Bearer ")
}
});
}
}
}
}
そして、Startup => ConfigureServices(
c.OperationFilter<AuthorizationHeaderParameterOperationFilter>();
また、ベースモデルクラスを持ち、カスタムヘッダーで送信する必要があるプロパティに[FromHeader]属性を使用することもできます。このようなもの:
public class AuthenticatedRequest
{
[FromHeader(Name = "User-Identity")]
public string UserIdentity { get; set; }
}
少なくとも、ASP.NET Core 2.1およびSwashbuckle.AspNetCore 2.5.0では問題なく動作します。
Asp .Net MVC 5で使用できます。
Swagger Configファイルで行われる必要性に続きます。
private class AddAuthorizationHeaderParameter: IOperationFilter // as a nested class in script config file.
{
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
if (operation.parameters == null)
operation.parameters = new List<Parameter>();
operation.parameters.Add(new Parameter
{
name = "Authorization",
@in = "header",
type = "string",
required = true
});
}
}
c.OperationFilter<AddAuthorizationHeaderParameter>(); // finally add this line in .EnableSwagger
Swaggerのヘッダー実装用にヘッダーを追加することもできます。