8

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

我找不到有关此类属性的任何信息,那么我该怎么做呢?另外,我需要添加一个新的 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);
        }
    }

}

4

4 回答 4

8

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

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

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

于 2012-09-22T03:51:22.103 回答
2

结帐这篇文章,特别是它谈论路线格式的地方。

于 2012-09-24T02:01:14.120 回答
0

使用 Microsoft.AspNetCore.Mvc;

[ControllerName("SomeOtherName")] // 这个属性不是编的。
公共类 ReportsController : 控制器 { ...

于 2021-05-21T06:53:05.497 回答
-2

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

更新

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

请让我知道它是否对您有任何帮助。

于 2012-09-22T02:35:57.450 回答