Tutorial ASP - NET. Core WebApi
Tutorial ASP - NET. Core WebApi
Tutorial ASP - NET. Core WebApi
https://learn.microsoft.com/es-es/sql/ssms/download-sql-server-management-studio-
ssms?view=sql-server-ver16
https://www.microsoft.com/es-es/sql-server/sql-server-downloads
);
);
-Provider hace referencia al motor de base de datos a emplear, en nuestro caso SQl Server. Para otras bases de
datos, buscar documentación
-OutputDir = Si queremos cambiar el nombre a la carpeta donde van a ir los modelos, cambiamos models por otro
nombre
8-Agregar al app.settings.Development.json
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
},
"ConnectionStrings": {
_context = context;
10-Agregar al program:
// Conseguimos una instancia o configuración global de la base de datos para todo el proyecto
ActionResult es lo que debería devolver todo proceso asíncrono. Es lo que nos va a permitir devolver un código de éxito
(Ej. 200)
ActionResult puede ir acompañado del tipo de dato que el endpoint va a devolver. En este caso, devolvemos una lista de
familias. Un try / catch debe siempre codificarse en una operación asíncrona porque puede dar error. Un error que rompa de forma
abrupta
la ejecución del servidor. Nosotros haremos un try/catch global por medio de desarrollar un filtro de excepción
Devolvemos el ActionResult. Es un Ok que por detrás es una especificación del código 200
Si no ponemos Ok, por defecto, al resultado que devolvemos, le pone un código 200
return Ok(listaOrdenada);
En caso de error devolvemos un error. Esos errores están en diferentes objetos. BadRequest devuelve un 400
/Si no recordamos el objeto podemos retornar un StatusCode de la enumeración StatusCodes. En el ejemplo, devolvemos
un 500
// return StatusCode(StatusCodes.Status500InternalServerError);
Si además queremos devolver un mensaje personalizado aparte del código de error, podemos crear un objeto ContentResult con
las características que queramos. En el ejemplo, un error 500 (InternalServerError) con un mensaje (Content) "Se ha producido un
error de acceso a la base de datos"
builder.Services.AddDbContext<MiAlmacenContext>(options =>
options.UseSqlServer(connectionString);
// En cada operación de modificación de datos en los controladores, deberemos habilitar el tracking en cada
operación
options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
);
14-Poner métodos Put en los controladores, con tracking. Y métodos con paginación
16- Métodos Delete y Post en los controladores. Métodos que agrupen, métodos con parámetros y sin parámetros.
Métodos que agreguen varios, métodos con sql de consulta, de inserción,
builder.Services.AddTransient<OperacionesService>();
20-Los validadores se añaden desde los DTOs o DTO que vayamos a usar:
[PesoArchivoValidacion(PesoMaximoEnMegaBytes: 4)]
[TipoArchivoValidacion(grupoTipoArchivo: GrupoTipoArchivo.Imagen)]
[PaginasValidacion(maxPaginas: 2000)]
21- Los métodos de los servicios se llaman desde los métodos de los controllers, también hayu que añadir la
inyección de dependencias en los constructores de los controladores:
_context = context;
_gestorArchivosLocal = gestorArchivosLocal;
_operacionesService = operacionesService;
22 – Crear una interfaz en c# que determine los métodos que va a tener un servicio en específico, y añadir definición
al servicio en cuestión mediante herencia (Clase : Interface) y en el program:
builder.Services.AddTransient<IGestorArchivos,GestorArchivosLocal>();
22b -PARA AÑADIR UNA INTERFAZ QUE DEFINA UN SERVICIO Y AÑADIR UNA TAREA SINGLETON
1--CREAR UNA INTERFACE IGESTORARCHIVOS
3--Cambiar las definiciones de la clase GestorArchivosLocal por IGestorArchivos que es la interfaz, cambiar en la propiedad y en el
constructor
builder.Services.AddTransient<IGestorArchivos, GestorArchivosLocal>();
ejecutará la tarea
7--Para que escriba el Servicio "Proceso finalizado" hay que iniciar el proyecto(run) seleccionando IIS Express en vez de http o
https, y luego detener el servidor desde la barra de tareas de Windows, abajo
23-AÑADIMOS UN MIDDLEWARE generando la clase(ejemplo:LogFileIPMiddleware.cs)
25-AÑADIR POLITICA CORS añadiendo los códigos en el program- Línea add cors y línea UseCors.
builder.Services.AddCors(options =>
options.AddDefaultPolicy(builder =>
builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
});
});
app.UseCors();
);
29-Añadir al program las líneas de autenticación por token y al swagger la posibilidad de añadir tokens.
30 - Comprobar el app setting.json que tenga la ConnectionString y las líneas para gestionar el token, mirar proyecto
almacén.
EXTRA AÑADIR SERILOG
A continuación se hará un tutorial extra para añadir Serilog a nuestra aplicación.
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<ChatHub>("/chatHub"); // El acceso al hub sería vía
https://localhost:puerto/chatHub
});
10- Crear carpeta JS en la carpeta wwwroot y crear archivo chat.js. Desarrollar nuestro componente en ese
archivo.
11- Probar la conexión.
12- Asegurarse de incluir la librería de SignalR en el html.
<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/7.0.14/signalr.min.js"></script>
13- Crear carpeta clases y crear la clase Message.
14- Crear una interfaz para el hub (ICHAT) con métodos.
15- Agregar la interface al Hub Hub<IChat>.
16- Cambiar el Hub.
17- Añadir código al chat.js si no se ha añadido(btn desconectar/conectar)
18- Crear clase Connection(Id, User).
19- Utilizar la clase conection en el back(chatHub.cs)
20- Métodos connection y diconnect
21- Comprobar que tenemos todo el código correcto y no da errores.
PARTE 2
1- Vamos a añadir métodos nuevos - añadimos método get users a la interface IChat
Task GetUsers(List<Connection> connections);
2- Añadir la llamada al método anterior a los métodos SendMessage y OnDisconnectedAsync
await Clients.All.GetUsers(conexiones);
3- Añadir una lista de usuarios a la vista HTML5
4- Añadir llamada al método en el chat.js
4-Copiamos interfaz IChat a nuestra biblioteca(en Hubs o en carpeta interfaces(crear si se quiere)) recuerda los
namespaces.
5-Copiar el chatHub.cs que ha pasado JL a las 10:27(el hub con metodos conected y disconected) comprobar
namespaces, y obserbar cambios en la clase-recomendacion-
6-En el hub(backEnd), comprobar que utilizamos la clase Connection y las llamadas a las conexiones en el
chat.js(frontEnd)
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<ChatHub>("/chatHub"); // El acceso al hub sería vía
https://localhost:puerto/chatHub
});
AÑADIR UN MICROSERVICIO
1. Crear un proyecto junto al almacen. De tipo Web API también. Sin openAPI.
2. Crear carpeta wwwroot. Crear index.html
3. Añadir al program - app.UseStaticFiles();.
4. Crear carpeta services.
5. Copiar un servicio del proyecto almacen GestorArchivosLocal. Quitar implementación interfaz.
6. Añadir el servicio en el program con AddTransient< GestorArchivosLocal >();.
7. Crear carpeta Controllers y crear un controlador WebApi en blanco. Le llamamos
ArchivosController.
8. Crear carpeta DTOs. Añadir DTOArchivos.
9. Copiar contenido del controller que pasó Juan Luis.
10. Cambiar IP en el controller y en el launchSettings.
11. Configurar proyectos para que inicien los dos a la vez.
AÑADIR UN gRPC
17. Añadimos métodos al controller del modelo cuyos datos vamos a tratar, en este caso
FamiliasController.
18.