C#MVC 4 ControllerName属性

时间:2012-09-22 01:31:56

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing maproute

我正在努力为我的MVC 4控制器提供友好的名称,我希望做一些类似[ActionName="My-Friendly-Name"]样式的东西,但对于整个控制器。

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

编辑:

例如,我想路由以下网址:

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

}

3 个答案:

答案 0 :(得分:8)

添加与您的特定名称匹配的自定义路线:

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

现在,控制器中包含“My-Friendly-Name”的每个URL都将使用您的新路由。

答案 1 :(得分:2)

结帐this post,特别是在谈到路线格式的地方。

答案 2 :(得分:-1)

我不知道你的问题是否有答案,但即使有问题,为什么世界上你会做这样的事情呢?为什么不采用标准方式:调用控制器类任何你喜欢的东西(只要它有意义)并让它为你调用框架?为什么要创建两个人工命名约定并在它们之间映射?我看到没有一个收获,但多重利弊。比如 - 它更难阅读,更难维护,更难理解,它也是微不足道的,但仍然是对性能的压力......

<强>更新

请查看此帖子,我认为他们确实解决了您所谈论的问题。

如果对您有任何帮助,请告诉我。