Pregunta

¿Alguien puede decirme por qué debería utilizar NonAction?Quiero decir, tengo un formulario con varios valores de envío:Actualizar, Eliminar o Insertar.Dado que todos los botones de envío tienen la misma forma en común, estoy cambiando el valor de envío dentro del controlador y actúo en consecuencia.

Como esto:

public ActionResult asd(string submitButton){
     switch(submitButton){
         case "Insert":
             return Insert();
         // bla bla bla
     }
}

[NonAction]
public ActionResult Insert(){
    // some code inside here
    return View();
}

Una vez más, ¿por qué debería utilizar NonAction en lugar de algo como esto?

public void Insert(){
    // some code inside here
}

Otros consejos

Vale la pena señalar que la necesidad de utilizar [NonAction] Se aplica sólo a métodos públicos.Los métodos protegidos y privados no se tratan como acciones.desde tu Update/Delete/Insert Los métodos son ayudantes para asd(), un método privado sería más apropiado para su escenario:

public ActionResult asd(string submitButton){
    switch(submitButton){
        case "Insert":
            return Insert();
        // bla bla bla
    }
}

ActionResult Insert(){
    // some code inside here
}

Si no usa el atributo [NonAction], alguien puede llamar a su acción directamente en lugar de tener que pasar por la función 'asd'

Leyendo el artículo de Haack

Cualquier método público en una clase de controlador se puede llamar a través de una URL.

A veces, es posible que deba evitar esto.Por ejemplo, si implementa alguna interfaz y es posible que no desee llamar a ese método público, puede marcar como NonAction

public interface IEmployee
{
 void Save(Employee e);
 bool Validate(Employee e);
}

public class EmployeeController:Controller, IEmployee
{
  public void Save(Employee e){
  }

  [NonAction]
  public void Validate(Employee e){
  }
}

Acabo de usar [NonAction] en nuestra api web, para decorar un montón de métodos de controlador (puntos finales) porque tuvimos una decisión de último minuto de posponer la entrega de los puntos finales específicos.

Por lo tanto, es útil si desea evitar exponer un punto final de API, pero aún desea mantener la implementación para más adelante.

Entonces usé este atributo y me ahorró mucho tiempo.

¡Lo eliminaré en la próxima versión y esto simplemente estará allí!

El atributo NonAction hace que una acción no sea accesible desde la barra de navegación.Por ejemplo, si tiene una acción que elimina elementos en la base de datos, debe agregar el atributo NonAction para que los usuarios no puedan acceder a él.

En primer lugar, piense en ActionResult simplemente como un tipo particular de construcción que devuelve MVC, que proporciona una conveniencia particular en términos de la forma en que ActionResult se puede manejar internamente dentro del marco MVC.Entonces, el hecho de que algo sea un ActionResult no significa necesariamente " esto debería estar disponible públicamente ".De hecho, cualquier método público en un controlador MVC será tratado como un método de acción, devuelva o no un ActionResult .

Entonces, simplemente tener un tipo de retorno que no es un ActionResult no evitará necesariamente que ese método se exponga como una acción disponible públicamente que se puede llamar a través de unURL.

Puede haber muchas razones por las que no desea exponer un método como una acción que se puede invocar a través de una URL, y en el caso de que desee 'protegerse' contra esto, es cuando usa la opción [NonAction '] atributo.

Esto se indica que un método de controlador no es un método de acción. Ejemplo: [NonAtion] Void público indextest () {// Hacer algo} Este es un atributo muy útil cuando la visibilidad del método del controlador no se puede cambiar a privado..

Es un atributo que se usa en los métodos definidos por modificadores de acceso público.En realidad, MVC Framework trata todos los métodos públicos como URL, pero en caso de que no desee esto, debe decorar un método con el atributo de no acción.Se puede lograr lo mismo haciendo que el método sea privado.

A continuación se proporciona un ejemplo de atributo de no acción. http://yogeshdotnet.com/non-action-attribute-in-mvc/

Si no desea invocar algunos métodos de acción, debe marcarlo con un atributo [NonAction] o hacerlo privado

public ActionResult Index(){
    return View();
}

[NonAction]
public ActionResult Countries(List<string>countries){
    return View(countries);
}

puedes copiar el código y pegarlo y ver el resultado.gracias

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top