Niewielka poprawa na najbardziej doskonałą odpowiedź @MarwaAhmad „s, jest sprawdzenie parametrów zerowych (np prosty GET lub zadzwoń ze wszystkimi params w adresie URL). Dodano również szczegóły dotyczące Basic Auth.
Ponadto, jeśli już używać globalnego IAuthorizationFilter
do powiedzenia egzekwowania HTTPS, a następnie będziemy chcieli zmienić bardziej ogólne
filter => filter is IAuthorizationFilter
do konkretnego
filter => filter is AuthorizeAttribute
public class AddAuthorizationHeaderParameterOperationFilter : IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
var filterPipeline = apiDescription.ActionDescriptor.GetFilterPipeline();
var isAuthorized = filterPipeline.Select(filterInfo => filterInfo.Instance)
.Any(filter => filter is IAuthorizationFilter);
var allowAnonymous =
apiDescription.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any();
if (isAuthorized && !allowAnonymous)
{
if (operation.parameters == null)
operation.parameters = new List<Parameter>();
operation.parameters?.Add(new Parameter
{
name = "Authorization",
@in = "header",
description = "Basic HTTP Base64 encoded Header Authorization",
required = true,
type = "string"
});
}
}
}
Uzyskiwanie błąd dla Systemu .Web.Http 4.0.0 nie można załadować. Korzystanie z frameworku 4.6.1. Każda pomoc –