• MVC和WebApi路由机制比较


    1、MVC使用的路由
    在MVC中,默认路由机制是通过解析url路径来匹配Action。比如:/User/GetList,这个url就表示匹配User控制器下的GetList方法,这是MVC路由的默认解析方式。
    为什么默认的解析方式是这样子的呢?因为MVC定义了一个默认路由,路由代码放在App_Start文件夹下的RouteConfig.cs中,今后我们如果想要自定义路由规则,那自定义路由的代码也要写在RouteConfig.cs中。
    public static void RegisterRoutes(RouteCollection routes)
    {
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
    }

    url:"{controller}/{action}/{id}"定义了路由解析规则,{controller}是必填参数默认值是Home,{action}是必填参数默认值是Index,{id}表示匹配名称为id的形参,而且是可选参数(方法的参数列表中可以有名为id的形参,也可以没有)。

    2、WebApi使用的路由
    在WebApi中,默认路由机制是通过解析http请求的类型来匹配Action,也就是说WebApi的默认路由机制不需要指定Action的名称。比如:/api/Pleasure,这个url就表示匹配Pleasure
    控制器下的[HttpGet]方法,/api是固定必填值,这是WebApi路由的默认解析方式。WebApi的默认解析方式之所以如此,同样也是因为定义了默认路由,路由代码放在App_Start文件夹下的WebApiConfig.cs中,
    今后我们如果想要自定义路由规则,那自定义路由的代码也要写在WebApiConfig.cs中。
    public static void Register(HttpConfiguration config)
    {
    // Web API 路由
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
    );
    }
    routeTemplate:"api/{controller}/{id}"定义了路由解析规则,api是固定必填值,{controller}是必填参数无默认值,{id}表示匹配名称为id的形参,而且是可选参数(方法的参数列表中可以有名为id的形参,也可以没有)。

    3、MVC和WebApi路由区别汇总
    WebApi的默认路由机制通过http请求的类型匹配Action(如Get请求匹配以Get开头的Action,Post请求匹配以Post开头的Action),MVC的默认路由机制通过url匹配Action
    WebApi的路由配置文件是WebApiConfig.cs,MVC的路由配置文件是RouteConfig.cs
    WebApi的Controller继承自Web.Http.ApiController,MVC的Controller继承自Web.Mvc.Controller

    webapi的路由设置可显示指定action。这种方式不是restful风格(不简洁),但是很明确,不容易有歧义,推荐使用该方式
    routeTemplate: "api/{controller}/{action}/{id}",

    注:
    当webapi的路由设置为routeTemplate: "api/{controller}/{id}"时:
    1)根据请求时的方法(如GET、POST)匹配Action

    当webapi的路由设置为routeTemplate: "api/{controller}/{action}/{id}"时:
    1)根据请求时的方法(如GET、POST)以及路径中的Action名称匹配;
    2)默认情况下以Get开头的Action依旧只能使用Get方法访问,以Post开头的Action依旧只能使用Post方法访问
    3)可以在Action的前面增加[HttpGet]、[HttpPost]强制制定访问的方法

    通常,为了简单起见,所有的方法均使用Post方式访问,访问路径均需要指定action

  • 相关阅读:
    [JSOI2015]染色问题
    [ZJOI2016]小星星
    [BZOJ4361]isn
    [BZOJ4043/CERC2014]Vocabulary
    [BZOJ3622]已经没有什么好害怕的了
    [BZOJ2958]序列染色
    [SDOI2013]spring
    [Usaco2012 Nov]Concurrently Balanced Strings
    php常用函数集合
    制作item和category的mvc视图总结
  • 原文地址:https://www.cnblogs.com/wwyydd/p/14171301.html
Copyright © 2020-2023  润新知