mvc路由机制 html,asp.net web api路由机制原理详解--路由注册及与MVC区别

在我之前写的mvc专题教程详细介绍了MVC路由机制原理,今天我来给大家详细的介绍一下asp.net web api路由机制同时谈谈其与MVC的路由区别。

web api是基于Http协议轻量级封装,web api有一个好处是你可以完全脱离IIS,你可以选择在IIS(ASP.NET Host

)运行框架,也可以运行在自己的宿主程序里面(Self-Host)。

其实web api和MVC路由概念还是有相似之处,都是外部一个Http请求通过路由表,映射到一个Controller的Action方法,执行完成并返回结果。

在.NET 4.0 MVC路由相关的代码是单独封装在一个叫做System.Web.Routing.dll的程序集里面,它主要的功能是作用是把一个特定的URI的请求分发(dispatching)到对应能处理的Http Handler。

一、asp.net  web api路由注册

下面来看看Web API怎么注册路由,在Application_Start里面可以找到一行如下代码:

GlobalConfiguration.Configure(WebApiConfig.Register);

类GlobalConfiguration有如下成员:

d62a9344740086c110285b57fbfacec1.gif

可以看到类GlobalConfiguration是被封装在程序集 System.Web.Http.WebHost.dll, v5.2.3.0

作用是为 ASP.NET 应用程序提供全局Http配置功能。其三个属性和一个静态方法分别是HttpConfiguration、HttpServer及HttpConfiguration和Configure。

在Application_Start里面类GlobalConfiguration有。调用的是方法Configure,参数是一个Action。

Action的好处是你可以把方法可以当成变量作为参数传递,这个让我屡试不爽。

在VS自动给我生成是传的参数WebApiConfig.Register,是静态类WebApiConfig的静态方法Register。

WebApiConfig.Register

下面我们就来看看类WebApiConfig有如下代码:

using System;

using System.Collections.Generic;

using System.linq;

using System.Web.Http;

using System.Web.Http.Filters;

namespace Lanhu.WebApi

{

public static class WebApiConfig

{

public static void Register(HttpConfiguration config)

{

// Web API configuration and services

// Web API routes

config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(

name: "DefaultApi",

routeTemplate: "api/{controller}/{action}/{id}",

defaults: new { id = RouteParameter.Optional }

);

}

}

}

注意:

Register方法里面的routeTemplate默认是为没有action这个参数的,因为web api默认是Restful API,上面是我自己加上的。如果你想让Web API可以路由类似MVC一样调用方法(RPC)一定要加上,不然会报404错误。

默认的配置如下:

25339b2982b5c69dfa56b0d313c2d15f.png

Register方法参数是一个类HttpConfiguration实例,它在程序集程序集 System.Web.Http.dll, v5.2.3.0

下面我们来看看HttpConfiguration有哪些成员:

caf0ac62bb20e771ea3bccb86ad48bb3.gif

以上这类是ASP.NET Web API配置的核心类,有MediaType,有依赖注入DependencyResolver,有MessageHandlers等等。

二、asp.net  MVC路由注册

同样在在Application_Start里面可以也可以找到一行注册路由规则的代码如下:

RouteConfig.RegisterRoutes(RouteTable.Routes);

类RouteConfig是VS自动给我们生成的一个类,它只有一个静态方法,参数为RouteCollection类型:

public class RouteConfig

{

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 }

);

}

}

RouteCollection类一个路由表类,其有下成员:

0cc3d5bce4b57d1ff3d0b334e2c97e01.gif

可以从上面看到RouteCollection类是被封装在程序集 System.Web.dll, v4.0.0.0里面的。它有一个静态属性Routes,而在Application_Start里面注册路由正好是利用的这个静态属性RouteTable.Routes。它是一个静态的对象,这样一修改可以在整个应用程序域共用。

三、总结

一、相同点

都是在Application_Start调用的注册代码

路由规则都有三个参数name,routeTemplate,defaults,而且作用都一样

二、不同点

1、注册是用的类不同

WEB API是GlobalConfiguration.Configure(WebApiConfig.Register);

而MVC是RouteConfig.RegisterRoutes(RouteTable.Routes);

WEB API的类GlobalConfiguration是封装在程序集 System.Web.Http.WebHost.dll里面

MVC是RouteConfig是VS生成的类,源码可以改。

2、注册路由参数不一样

WEB API的GlobalConfiguration.Configure是一个静态类的静态方法GlobalConfiguration的Configure是一个Action,这样可以传一个方法WebApiConfig.Register。

MVC的RouteConfig.RegisterRoutes是一个类的的静态属性RouteTable.Routes

3、路由规则集合类型及写的地方不一样

WEB API是WebApiConfig的方法Register通过改变对象的config的Routes属性(类型为HttpRouteCollection)

MVC是在RouteConfig的方法RegisterRoutes通过改变传递进来的routes静态对象(类型为RouteCollection)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值