MVC笔记--特性路由

  • 物性路由:将路由和控制器放在一块儿,这样更简单方便,还能够处理复杂的路由场景
  • 传统路由:集中、强制、基于代码风格来定义的。
每一个MVC应用程序都须要路由来定义本身的处理请求方式,路由是MVC是应用程序的入口点。咱们先了解一下路由涉及的主要概念:路由定义是从URL模板开始的,由于它指定了与路由相匹配的模式。路由定义能够作为控制器类或操做方法的特性。路由能够指定的它的URL及其默认值,此外,它还能够约束URL的各个部分,提供关于路由如何及什么时候与传入的URL相匹配的严格控制。
建立一个MVC程序后,咱们能够在Application_Start/RouteConfig.cs文件中。由于咱们此次主要讲特性路由,因此能够先删除里面默认的全部内容,经过MapMvcAttributeRout()方法来定义。
在HomeController中随便找一个视图前面加上[route("")],我这里用的是about,定义的路由名为”aboutTest“
 
[Route("aboutTest")]
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
 
return View();
}
URL用这个访问: http://localhost:8957/ceshi
*这些URL就不要写home/ceshi了,由于咱们已经定义路由,直接输入就能够访问
 
控制器路由:前面看了如何把路由特性直接添加到操做方法上,但不少时侯控制器类中的方法遵循的模式具备类似的路由特情,这里咱们能够定一下action的特殊路由参数,之后该控制器下的路由就不用重复写类似的代码了
/// <summary>
/// 定义路由映射
/// </summary>
[Route("{home}/{action}")]
public class HomeController : Controller
{
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
 
return View();
}
}
固然用这种方式后,控制器上也能够添加特性路由,也是能够访问的
咱们也可使用前缀“RoutePrefix”
/// <summary>
/// 定义路由映射--使用前缀
/// </summary>
[RoutePrefix("home")]
[Route("{action}")]
这样程序会帮咱们自动加上“home”控制器的前缀,二者皆支持覆盖行为,即为一个控制器指定多个路由规则:
[Route("")]
[Route("default")]
public ActionResult Index()
{
return View();
}
这两条URL均可以访问到同一个控制器
* [Route("{home}/{action}")]:用这种方式,控制器前台有指定路由,URL访问不用输入控制器的前缀例:
这两条URL访问的都是Index控制器。若是没有为控制器添加特性路由,在访问时就要添加控制器的名字(前缀)
例:http://localhost:8957/home/About 这条URL访问的是“About”控制器
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
 
return View();
}
路由约束:当咱们使用带有参数的路由时,会发现若是咱们想让相同的路由,不一样的参数分别访问不一样的控制器时,咱们就要用到路由约束
[Route("ceshi/{id:double}")]
public ActionResult Test1(string id)
{
return View();
}
下面的图片是内联表,我偷个懒,切了一张图片;
 
(未完,待续)
相关文章
相关标签/搜索