edd*_*nts 4 c# asp.net-mvc routing attributerouting
我开始考虑将应用程序移到MVC6以利用新框架.我遇到的最大问题之一是路由(仅限属性路由,我已完成删除默认路由).
我的应用程序通常设置如下:
区域/管理/控制器区域/客户/控制器/控制器< - 非区域项目
在每个区域中,我有一个基本控制器(如AdminBase,CustomerBase),它将包含带有"AreaPrefix"的[Area]标签,该区域中的每个控制器将继承它并指定[RoutePrefix].
问题是如果我想在路由中包含区域/控制器,每个ActionResult必须包含[Route("[area]/[controller]/[action]")]来产生输出,但是如果我,例如我有一个"ChangeAddress"控制器,我会在URL中将其作为"更改地址"的前缀,但是我没有办法看到,没有明确地将它放在控制器中的所有路由上如何实现这一点?
在MVC6中,你仍然有区域和前缀,它只是被降级为控制器级别的Route标签,并将动作路由放入http动词.所以即
这个:
[RouteArea("AreaPrefix")]
[RoutePrefix("RoutePrefix")]
public class HomeController : Controller
{
...
[HttpGet]
[Route("LoginAction")]
public ActionResult Login() ....
Run Code Online (Sandbox Code Playgroud)
变
[Route("AreaPrefix/ControllerPrefix")]
public class HomeController : Controller
{
...
[HttpGet("LoginAction")]
public IActionResult Login() {
Run Code Online (Sandbox Code Playgroud)
所以它更模糊,但我个人一直是自我牺牲路由过程的罪魁祸首,并且它使用[]表示法中的标准路由对象(将其视为之前的{}).但它仍然提供了一次指定分层的控制级别,因此它现在提供了一个更简单的继承模型:
[Route("AreaPrefix/ControllerPrefix")
public class HomeOps : Controller // Controller Suffix is optional
{
}
[Route("api")]
public class HomeApiOps : HomeOps
{
// put the api AJAX methods here
[HttpPost("lookup")] // will route to // AreaPrefix/ControllerPrefix/api/lookup
public IActionResult Lookup() {
}
public class HomePageOps : HomeOps
{
// put similar routes for View returns, file content responses here
[HttpPost("lookup")] // Will route to AreaPrefix/ControllerPrefix/lookup
public IActionResult Lookup() {
}
Run Code Online (Sandbox Code Playgroud)
这可以深入分析表达"工作单元"和"业务线"概念的更有条理的方式,在这种方式中,您可以轻松地分组并分离api调用和页面,而无需大规模控制器或无休止的#region旅行.
通过这种继承,还要记住,您可以为每个区域创建一个根控制器类,并为区域范围的分层设置某些路由,然后继承到"ControllerPrefix"开销路由的第二层,并且只需要在每个操作上指定操作路由name,它使用继承汇总将路由粘合在一起,将前面的示例转换为AreaPrefix/ControllerPrefix/Route
我和你在一起使用MVC6,我的业务客户端开发人员喜欢这个平台,而在数据端,它使得他们的信息干净简单,但稀疏的文档有时令人沮丧......希望这有帮助
| 归档时间: |
|
| 查看次数: |
3272 次 |
| 最近记录: |