2012-09-22 72 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,特別是在談到路線格式