我正在努力为我的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);
}
}
}
答案 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)
我不知道你的问题是否有答案,但即使有问题,为什么世界上你会做这样的事情呢?为什么不采用标准方式:调用控制器类任何你喜欢的东西(只要它有意义)并让它为你调用框架?为什么要创建两个人工命名约定并在它们之间映射?我看到没有一个收获,但多重利弊。比如 - 它更难阅读,更难维护,更难理解,它也是微不足道的,但仍然是对性能的压力......
<强>更新强>
请查看此帖子,我认为他们确实解决了您所谈论的问题。
如果对您有任何帮助,请告诉我。