Red de conocimiento de abogados - Derecho de sociedades - Cómo hacer que WebAPI genere automáticamente documentación API en línea hermosa y práctica

Cómo hacer que WebAPI genere automáticamente documentación API en línea hermosa y práctica

1.1 SwaggerUI

SwaggerUI es una sencilla herramienta de prueba y documentación de Restful API. Sencillo, bonito y fácil de usar (demostración oficial). La API se muestra leyendo la configuración JSON. El proyecto en sí solo se basa en algunos archivos estáticos html, css.js. Puede usarlo en casi cualquier contenedor web.

1.2 Swashbuckle

Swashbuckle es una biblioteca de clases .NET que puede generar la configuración JSON correspondiente a SwaggerUI a partir de todos los métodos de controlador abiertos de WebAPI. Luego muéstrelo a través de SwaggerUI. SwaggerUI ya está incluido en la biblioteca de clases. Por lo que no se requiere ninguna instalación adicional.

2. Inicio rápido

Cree el proyecto OnlineAPI para encapsular Baidu Music Service (descarga de muestra). A través de la API, puede buscar, obtener información musical y conexiones de reproducción.

Intento eliminar algunos archivos que no se utilizarán en nuestra demostración para que parezca más simple.

Instalación de WebAPI Swashbuckle

Install-Package Swashbuckle

Los comentarios del código generan instrucciones de documentación.

Swashbuckle lee los comentarios del archivo XML generado y genera SwaggerUI e instrucciones en la configuración JSON.

Durante la instalación, se generará un archivo de configuración SwaggerConfig.cs en la carpeta App_Start del directorio del proyecto, que se utiliza para configurar los comportamientos de visualización relacionados con SwaggerUI. Como se muestra en la imagen:

Elimine los comentarios en aproximadamente 99 líneas del archivo de configuración y modifíquelo a

c.IncludeXmlComments(GetXmlCommentsPath(thisAssembly.GetName().Name)) ;

Y agregar un método en la clase actual

///

///

///

///

cadena estática protegida GetXmlCommentsPath(nombre de cadena)

{

return string.Format(@"{0}\bin\{1}.XML", AppDomain.CurrentDomain.BaseDirectory, nombre);

}

Apretado Luego marca "archivo de documento XML" en la pestaña de generación de propiedades de este proyecto web, y el archivo de anotaciones de la biblioteca de clases se genera durante el proceso de compilación

Agrega tres Baidu Music API

Acceda a http:///swagger/ui/index, el efecto de visualización final

Probamos si la API se ejecuta correctamente a través de la API

3. Agregue un encabezado HTTP personalizado

Al desarrollar API móviles, a menudo es necesario verificar los permisos. Es mejor colocar parámetros de verificación en el encabezado de la solicitud HTTP. WebAPI se puede usar con filtros para verificar permisos

Primero necesitamos crear una clase con la interfaz IOperationFilter.

IOperationFilter

usando System;

usando System.Collections.Generic;

usando System.Linq;

usando System.Web;

usando System.Web.Http;

usando System.Web.Http.Description;

usando System.Web.Http.Filters;

usando Swashbuckle.Swagger;

espacio de nombres OnlineAPI.Utility

{

clase pública HttpHeaderFilter: IOperationFilter

{

public void Aplicar(Operación operación, SchemaRegistry

schemaRegistry, ApiDescription apiDescription)

{

if (operación.parametros == null) operación.parametros = nuevo

Lista();

var filterPipeline =

apiDescription.ActionDescriptor.GetFilterPipeline();

// Determine si se debe agregar un filtro de permiso

var isAuthorized = filterPipeline.Select(filterInfo =>

filterInfo.Instance).Any(filter => filter is IAuthorizationFilter);

//Determinar si se permiten métodos anónimos

var enableAnonymous =

apiDescription.ActionDescriptor.GetCustomAttributes().Any();

if ( isAuthorized && !allowAnonymous)

{

operación.parameters.Add(new Parameter

{

nombre = "acceso- clave" ,

@in = "encabezado",

descripción = "Clave de acceso de usuario",

requerido = falso,

tipo = "cadena"

})

;

}

}

}

}

Configure la clase de método anónimo en EnableSwagger en SwaggerConfig. cs Agregar una línea de código de registro

c.OperationFilter();

Agregar un filtro de permisos web

usando System;

usando System.Collections.Generic;

usando System.Linq;

usando System.Net;

usando System.Net.Http;

usando System.Text;

usando System.Web;

usando System.Web.Http;

usando System.Web.Http.Controllers ;

p>

usando Newtonsoft.Json;

espacio de nombres OnlineAPI.Utility

{

///

/ //

///

clase pública AccessKeyAttribute : AuthorizeAttribute

{

// /

/// Verificación de permisos

///

///

///

anulación protegida bool IsAuthorized(HttpActionContext actionContext)

{

var request = actionContext.Request ;

if (request.Headers.Contains("clave-de acceso"))

{

var accessKey = request.Headers. GetValues("access-key").SingleOrDefault();

//Clave de verificación TODO

return accessKey == "123456789";

}

return false;

}

///

/// Manejo de solicitudes no autorizadas

/ // < /summary>

///

anulación protegida void HandleUnauthorizedRequest(HttpActionContext actionContext)

{

var content = JsonConvert.SerializeObject(new {State = HttpStatusCode. No autorizado});

actionContext.Response = new HttpResponseMessage

{

Contenido = new StringContent(content, Encoding.UTF8, "application/json"),

StatusCode = HttpStatusCode.Unauthorized

};

}

}

}

Agregue un filtro al ApiController o Acción que desee

[AccessKey]

El efecto de visualización final

4. Muestra los parámetros del archivo cargado

SwaggerUI tiene la función de cargar archivos, que es similar a agregar un encabezado HTTP personalizado, excepto que usamos configuraciones especiales para indicar que la API tiene la función de cargar archivos

usando el Sistema;

usando System.Collections.Generic;

usando System.Linq;

usando System.Web;

usando System.Web.Http .Descripción;

usando Swashbuckle.Swagger;

espacio de nombres OnlineAPI.Utility

{

///

// /

///

clase pública UploadFilter : IOperationFilter

{

// /

/// Carga de archivos

///

///

///

///

aplicación pública void (operación operación, SchemaRegistry esquemaRegistry, ApiDescription apiDescription)

{

if (!string.IsNullOrWhiteSpace(operación.summary) && operación.summary.Contains("upload"))

{

operación.consume. Add("application/form-data");

operación.parameters.Add(new Parameter

{

nombre = "archivo",

@in = "formData",

requerido = verdadero,

tipo = "archivo"

});

}

}

}

}

Agregue una línea de código de registro a la clase de método anónimo de configuración EnableSwagger en SwaggerConfig.cs

c.OperationFilter();

Efecto de visualización del documento API