6

Ich arbeite an der Bereitstellung von freundlichen Namen für meine MVC 4-Controller und ich möchte etwas wie die [ActionName="My-Friendly-Name"] Stil, aber für den gesamten Controller zu tun.C# MVC 4 ControllerName Attribut

Ich konnte keine Informationen über ein solches Attribut finden, also wie würde ich das tun? Muss ich auch eine neue MapRoute hinzufügen, um damit umzugehen?

EDIT:

Zum Beispiel, würde Ich mag die folgende URL Zustieg:

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

an folgende Controller geleitet werden:

[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); 
     } 
    } 

}

Antwort

-1

I Ich weiß nicht, ob es eine Antwort auf deine Frage gibt, aber selbst wenn es eine gibt, warum in der Welt würdest du so dünn sein? G? Warum nicht Standard-Weg: Rufen Sie die Controller-Klasse an, was Sie wollen (solange es Sinn macht) und lassen Sie sie vom Framework für Sie aufrufen? Warum zwei künstliche Namenskonventionen erstellen und zwischen ihnen zuordnen? Ich sehe keinen einzigen Gewinn, aber mehrere Nachteile. Wie - sein schwerer zu lesen, schwieriger zu pflegen, schwerer zu verstehen, ist es auch unerheblich, aber immer noch eine Belastung für die Leistung ...

aktualisieren

Bitte in diesem Posting aussehen, denke ich Sie haben das Problem gelöst, über das Sie sprechen.

Bitte lassen Sie mich wissen, wenn es Ihnen keine Hilfe war.

+0

Der Grund dafür ist, dass ein Teil des Routings auf Daten basiert, die in einer Datenbank gespeichert sind (also statt einer URL '/ Items/5') kann die URL etwas wie'/Media/Music/Somebody-to-Love sein ') und das hat ein paar besondere Komplikationen verursacht, die die einfachste Möglichkeit wäre, die gleiche Funktionalität wie' [ActionName] ', aber für Controller zu ermöglichen. Wenn es keine Lösung gibt, muss ich einen anderen Weg finden. Da bin ich mir sicher, das war nur mein erster Gedanke :) –

+1

Cool, verstanden, schau dir das Update in meiner Antwort bitte an. –

+0

Einige meiner Kunden bevorzugen http://www.domain.com/produkt statt http://www.domain.com/product. Ich möchte keinen ProdukterController haben und Schwedisch in meinem Code mischen. Ich habe es mithilfe von AttributeRouting gelöst, um benutzerdefinierte Routen für alle meine Controller und Aktionen zu erstellen. –

6

eine benutzerdefinierte Route hinzufügen, die Ihren spezifischen Namen übereinstimmen: Jetzt

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

jede URL, die „My-Freundlich-Namen“ für die Steuerung Ihre neue Route wird verwenden enthält.

2

Zur Kasse this post, vor allem, wo es um Route Formatierung geht.