Controlador en ASP.NET Core

Antes del advenimiento de ASP.NET CORE, el Controlador que implementamos, MVC heredó de la clase base del Controlador, WebApi, heredado de ApiController. Ahora ASP.NET CORE ha fusionado MVC con WebApi y ya no distingue entre MVC o WebApi. La estructura de herencia del controlador de ASP.NET CORE también ha cambiado. Cuando veamos otros ejemplos, encontraremos que algunos heredan de Controller y otros heredan de ControllerBase. De hecho, ControllerBase es la clase base de Controller. En otras palabras, si hereda de Controller, en realidad hereda ControllerBase. ¿Cuándo debo elegir heredar ControllerBase directamente?

ControllerBase

Primero veamos los metadatos de ControllerBase:

es muy largo y no está completo. Puede ver que ControllerBase es una clase abstracta e implementa una gran cantidad de métodos virtuales. La mayoría de estos métodos virtuales corresponden a códigos de estado Http.
Por ejemplo:

public virtual OkResult Ok(); //http status 200
public virtual NotFoundResult NotFound(); //http status 404
public virtual ForbidResult Forbid(); //http status 403
public virtual CreatedResult Created(Uri uri, [ActionResultObjectValue] object value); // http status 201
...还有很多很多...

Obviamente, esta es la clase base diseñada para Restful Api, por lo que cuando desee diseñar una interfaz Restful (API web), puede elegir heredar de ControllerBase, ya puede satisfacer sus necesidades.

Controlador

Mire los metadatos del controlador: el

controlador también es una clase abstracta, heredada de ControllerBase, y hereda varias interfaces. Obviamente, el contenido de Controller más que ControllerBase es principalmente algo que trata con MVC.
Por ejemplo: Viewbag, propiedades de Viewdata, Json, métodos de visualización, etc.

public dynamic ViewBag { get; }
public ViewDataDictionary ViewData { get; set; }
public virtual JsonResult Json(object data);
public virtual ViewResult View();
...

Entonces, si necesita implementar un sistema MVC, si desea usar la plantilla cshtml y la maquinilla de afeitar para probar la página de renderizado del motor, debe heredar el controlador.

LITTLE Controller

Además de heredar Controller y ControllerBase, el marco ASP.NET CORE puede hacer que su clase POCO se convierta directamente en un Controller.

Utilice el sufijo "Controlador"

¿Puede TestController funcionar correctamente con el siguiente código?

    [Route("api/[controller]")]
    public class TestController 
    {
        [HttpGet]
        public string Get()
        {
            return "TestController";
        }
    }

Ejecútelo:

aunque la clase TestController no hereda de ninguna clase, pero funciona en el marco ASP.NET CORE. El marco ASP.NET CORE encontrará la clase con el sufijo "Controlador" por defecto y lo usará como un Controlador real. También se intentará que coincida cuando el sistema de enrutamiento finalmente coincida con el Controlador.

Usar ControllerAttribute

Si su clase de controlador tiene algún requisito especial, e incluso el nombre de la clase no desea agregar el sufijo "Controlador", entonces otro método es usar ControllerAttribute.

    [Controller]
    [Route("api/[controller]")]
    public class POCO 
    {
        [HttpGet]
        public string Get()
        {
            return "POCOController";
        }
    }

Ejecútelo: la

clase POCO no hereda de ninguna clase, y no hay un nombre de sufijo "Controlador", pero debido a que está marcado como ControllerAttribute, el marco ASP.NET CORE lo considerará un Controlador. También se intentará hacer coincidir cuando el sistema de enrutamiento finalmente coincida con el controlador.

Use NonControllerAttribute

Si uno de los nombres de clase incluye el sufijo "Controlador", pero no desea que el marco ASP.NET CORE lo encuentre, puede agregar NonControllerAttribute a la clase. Por lo tanto, el marco ASP.NET CORE lo ignorará.
Cambie el TestController ahora, más [NonController]:

    [NonController]
    [Route("api/[controller]")]
    public class TestController 
    {
        [HttpGet]
        public string Get()
        {
            return "TestController";
        }
    }

Ejecútelo:

/ api / test ya no coincide con el controlador.

Resumen

  1. ControllerBase se puede heredar al diseñar una interfaz tranquila (API web)
  2. El controlador se puede heredar al diseñar el sistema MVC
  3. Cuando un nombre de clase POCO contiene el sufijo "Controlador" o al agregar ControllerAttribute, el marco lo considerará como un controlador
  4. NonControllerAttribute se puede agregar cuando una clase no quiere que el marco la use como controlador

Supongo que te gusta

Origin www.cnblogs.com/kklldog/p/aspnetcore-controller.html
Recomendado
Clasificación