在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
属性路由示例 今天讨论 ASP.NETCoreMVC 中的属性路由 在Startup.cs中使用UseMvc()方法:请注意,我们使用 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseMvc();
}
使用属性路由,我们使用 public class DepartmentController : Controller
{
[Route("")]
[Route("Department")]
[Route("Department/List")]
public string List()
{
return "你好,我是list";
}
public string Infor()
{
return "你好,我是infor";
}
}
在 使用这 3 个路由模板,当遇到以下 3 种 url 地址进行访问DepartmentController的 属性路由参数 使用传统路由,我们可以将路由参数指定为路由模板的一部分,比如,在Index()中传一个主键等等。 当然属性路由也可以做同样的事情。 public class DepartmentController : Controller
{
private readonly IStudentRepository _studentRepository;
//使用构造函数注入的方式注入IStudentRepository
public DepartmentController(IStudentRepository studentRepository)
{
_studentRepository = studentRepository;
}
[Route("Home/Details/{id}")]
public IActionResult Details(int id)
{
//实例化HomeDetailsViewModel并存储Student详细信息和PageTitle
HomeDetailsViewModel homeDetailsViewModel = new HomeDetailsViewModel()
{
Student = _studentRepository.GetStudent(id),
PageTitle = "学生详细信息"
};
return View(homeDetailsViewModel);
}
}
属性路由可选参数 当前,当我们在 public class DepartmentController : Controller
{
private readonly IStudentRepository _studentRepository;
//使用构造函数注入的方式注入IStudentRepository
public DepartmentController(IStudentRepository studentRepository)
{
_studentRepository = studentRepository;
}
[Route("Home/Details/{id?}")]
public IActionResult Details(int id)
{
//实例化HomeDetailsViewModel并存储Student详细信息和PageTitle
HomeDetailsViewModel homeDetailsViewModel = new HomeDetailsViewModel()
{
Student = _studentRepository.GetStudent(id),
PageTitle = "学生详细信息"
};
return View(homeDetailsViewModel);
}
}
控制器和操作方法名称 在属性路由中,控制器名称和操作方法名称,不会影响路由属性名称,他们没有强关联关系。 路径名称我们自己定义,然后根据自己的定义进行查找对应的控制器和方法。 public class DepartmentController : Controller
{
[Route("")]
[Route("Home")]
[Route("Home/Index")]
public ViewResult Department()
{
return View();
}
}
通过以下三种方式依然可以查找到: /
/Home
/Home/Index
属性路由支持层次结构 在 namespace StudentManagement.Controllers
{
[Route("Department")]
public class DepartmentController : Controller
{
[Route("/")]
[Route("List")]
public string List()
{
return "你好,我是list";
}
[Route("Infor/{id}")]
public string Infor(int id)
{
return "你好,我是infor";
}
}
}
这样,项目启动,就会直接找到Department控制器下的List方法,如果[Route("/")]中不加斜杠,直接启动项目会报错,说找不到页面,需要带上控制器名称才能找到,加上的话直接启动就会找到 属性路由中自定义路由 [Route("[controller]")]
public class DepartmentController : Controller
{
[Route("[action]")]
public string List()
{
return " DepartmentController控制器中的List()方法";
}
[Route("[action]")]
public string Details()
{
return " DepartmentController控制器中的Details()方法";
}
}
使用 controller 和 action 标记,在 URL 路径中的 要使
[Route("[controller]")]
public class DepartmentController : Controller
{
[Route("[action]")]
[Route("")] // 使 List()成为默认路由入口
public string List()
{
return " DepartmentController控制器中的List()方法";
}
[Route("[action]")]
public string Details()
{
return " DepartmentController控制器中的Details()方法";
}
}
我们最好在控制器上只设置一次,而不是在控制器中的每个操作方法中包含 [Route("[controller]/[action]")]
public class DepartmentController : Controller
{
public string List()
{
return " DepartmentController控制器中的List()方法";
}
}
这样减少代码重复。 |
请发表评论