2012-09-22 21 views
6

Estoy trabajando para proporcionar nombres amigables para mis controladores MVC 4 y quiero hacer algo como el estilo [ActionName="My-Friendly-Name"], pero para todo el controlador.C# MVC 4 ControllerName atributo

No pude encontrar ninguna información acerca de tal atributo, entonces ¿cómo iba a hacer eso? Además, ¿tendré que agregar un nuevo MapRoute para manejarlo?

EDIT:

Por ejemplo, me gustaría encaminar la siguiente url:

http://mysite.com/my-reports/Details/5 

pueden dirigir a la siguiente controlador:

[ControllerClass="my-reports"] // This attribute is made up. I'd like to know how to make this functionality 
public class ReportsController : Controller 
{ 
    // 
    // GET: /Reports/ 

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

    public ViewResult Details(int id) 
    { 
     Report report = db.Reports.Single(g => g.Id == id); 
     return View(report); 
    } 

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

    [HttpPost] 
    public ActionResult Create(Report item) 
    { 
     try 
     { 
      if (ModelState.IsValid) 
      { 
       item.Id = Guid.NewGuid(); 
       _context.Reports.AddObject(item); 
       _context.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      return View(item); 
     } 
     catch (Exception) 
     { 
      return View(item); 
     } 
    } 

}

Respuesta

-1

I no sé si hay respuesta a su pregunta, pero incluso si hubiera una, ¿por qué en el mundo haría una tan delgada ¿gramo? ¿Por qué no hacer de manera estándar: llamar a la clase de controlador cualquier cosa que desee (siempre que tenga sentido) y que el marco la llame por usted? ¿Por qué crear dos convenciones de nomenclatura artificiales y mapear entre ellas? No veo una sola ganancia, sino múltiples contras. Tales como - el más difícil de leer, más difícil de mantener, más difícil de entender, también es insignificante, pero aún así, una tensión en el rendimiento ...

actualización

favor ver este anuncio, creo ellos resolvieron el problema del que estás hablando.

Por favor, hágamelo saber si era de alguna ayuda para usted.

+0

La razón es porque algunas de las rutas se basan en valores almacenados en una base de datos (Entonces, en lugar de tener una URL '/ Items/5' la URL puede ser algo como'/Media/Music/Somebody-to-Love ') y esto ha causado algunas complicaciones particulares que la forma más fácil de solucionar sería permitir la misma funcionalidad que' [ActionName] 'pero para los controladores. Si no hay solución, tendré que encontrar otra forma. Estoy seguro de que sí, esta fue solo mi primera idea :) –

+1

Genial, entendido, mira la actualización en mi respuesta, por favor. –

+0

Algunos de mis clientes prefieren http://www.domain.com/produkter en lugar de http://www.domain.com/product. No quiero tener un ProdukterController y mezclar en sueco en mi código. Lo he solucionado usando AttributeRouting para hacer rutas personalizadas para todos mis controladores y acciones. –

6

añadir una ruta personalizada que coincidirá con su nombre específico:

routes.MapRoute(
    "MyCustomRoute", 
    "My-Friendly-Name/{action}/{id}", 
    new { controller = "ReportsController", action = "Index", id = "" } 
); 

Ahora cada URL que contiene "Mi-Friendly-Name" para el controlador usará su nueva ruta.

2

Pago this post, particularmente cuando se trata de formateo de ruta.

Cuestiones relacionadas