2012-09-22 30 views
6

我正在为我的MVC 4控制器提供友好的名称,我想要做一些类似[ActionName="My-Friendly-Name"]的风格,但对于整个控制器。C#MVC 4 ControllerName属性

我找不到任何有关此属性的信息,那么我该如何去做呢?另外,我需要添加一个新的MapRoute来处理它吗?

编辑:

例如,我想路线下面的网址:

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

被路由到下列的控制器:

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

}

回答

-1

我不知道你的问题是否有答案,但即使有问题,为什么在这个世界上你会做得如此薄G?为什么不做标准方式:调用控制器类(你认为什么)(只要它有意义),并让框架为你调用它?为什么要创建两个人造命名约定并在它们之间进行映射?我看不到一个单一的收益,但有多重利弊。比如 - 它更难读,更难维护,更难理解,这也是微不足道的,但尽管如此,对性能的应变......

更新

请看看这个帖子,我想他们确实解决了你正在谈论的问题。

请让我知道,如果这是给你任何帮助。

+0

原因是因为一些路由是基于存储在数据库中的值发生的(所以不要把url设置为'/ Items/5',这个url可以是'/ Media/Music/Somebody-to-Love '),这导致了一些特殊的复杂性,最简单的解决方法是允许与[ActionName]相同的功能,但对于控制器。如果没有解决方案,我必须找出另一种方法。我敢肯定,这只是我的第一个想法:) –

+1

很酷,理解,请在我的答案看看更新。 –

+0

我的一些客户更喜欢http://www.domain.com/produkter而不是http://www.domain.com/product。我不想在我的代码中拥有一个ProdukterController和混合瑞典语。我已经使用AttributeRouting解决了它,为我所有的控制器和操作创建自定义路由。 –

6

添加自定义路线,将满足您的特定名称:

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

现在包含“我的好记的名称”的控制器将使用新的航线每周网址。

2

结帐this post,特别是在谈到路线格式