ASP NET – Override ActionResult usando Atributos – MVC – C#

Publicado: 20 de maio de 2015 em C#

A maioria das linguagens de programação possuem o recurso de sobrecarregar métodos conhecido como Overrride. Uma sobrecarga nada mais é do que possuir o mesmo método com parâmetros diferentes, esta técnica é muito útil e amplamente utilizada por vários frameworks escritos em varias linguagens diferentes. Em C# podemos sobrecarregar métodos a qualquer momento, sempre quando necessário, no entanto o framework ASP.NET MVC cria algumas regras básicas para sobrecarregar ações em seus controladores. Estás regras serão amplamente utilizadas em toda sua aplicação, principalmente na manipulação de dados. Para sobrecarregar ActionResults em seus controladores você precisa especificar o método HTTP e utilizar um atributo especifico que necessita ser diferente para cada método sobrecarregado, por exemplo, podemos ter uma ação para o método POST e uma ação do mesmo nome para o método GET, assim como outros métodos HTTP.

HttpGetAttribute: https://msdn.microsoft.com/en-us/library/system.web.mvc.httpgetattribute(v=vs.118).aspx HttpPostAttribute: https://msdn.microsoft.com/en-us/library/system.web.mvc.httppostattribute(v=vs.118).aspx

Usando Atributos para Sobrecarregar Ações de Resultados

1 – Crie uma aplicação ASP.NET MVC usando o Template padrão, crie um novo controlador e uma nova rota para o controlador, utilize os códigos abaixo para referencia:

MVC - Controlador e Rota

MVC – Controlador e Rota

2 – Na a página inicial utilize a URL e o parâmetro criado na rota manualmente para acessar o método GET e assim a sua ação de resultados correspondente:

MVC - Atributo GET

MVC – Atributo GET

Você pode criar uma chamada utilizando o método POST na pagina principal para testar a sua ação sobrecarregada. Exemplo: Neste exemplo criamos um controlar e sua respectiva rota. Sobrecarregamos o método da ação de resultado para que seja executado somente para o tipo de método HTTP no qual necessitamos.

C#

Rotas

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MeuMVC
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            // Cria uma nova rota para o controlador

            // Define controlador e parâmetros
            routes.MapRoute("Programas", "programas/{linguagem}",
                new { controller = "Programas", action = "Indice", 
                    
                    // Parâmetro opcional
                    linguagem =  UrlParameter.Optional
                     
                });

            routes.MapRoute(
                name: "Default", 
                
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}

Controlador

using MeuMVC.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MeuMVC.Controllers
{
    public class ProgramasController : Controller
    {
        // Utiliza parâmetro diretamente na ação definida na rota.
        
        // Sobrecarga de métodos de ação de resultado
        // O Atributo HTTP é necessario para a sobrecarga

        
        [HttpGet]
        public ActionResult Indice(string linguagem)
        {
            // Exibe Mensagem
            var mensagem = "Linguagem: " + Server.HtmlEncode(linguagem);                          
            
            return Content(mensagem);
        }

        [HttpPost]
        public ActionResult Indice()
        {
            // Exibe Mensagem           
            return Content("Este resultado utiliza o método POST");
        }
       
    }
}                        

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s