模型绑定,过滤器, 路由和其他MVC功能,在WEB API中存在于System.Web.Http程序集;但是在MVC中这些功能存在于System.Web.Mvc程序集。...主要的区别有以下几点: 在WEB API 路由模式中 {action}参数是可选的,但是你可以自行包含 一个 {action} 参数。在ASP.NET MVC中 {action} 参数是强制的。...不像ASP.NET MVC,Web API仅能接收一个复杂类型作为参数。 Q14. ASP.NET WEB API2中如何启用特性路由? Ans....如何在ASP.NET WEB API2中定义特性路由? Ans....像ASP.NET MVC5那样,可以在WEB API2的controller级别和action级别定义特性路由: Controller level routing(控制器级别路由) 在控制器级别定义的特性路由将应用到所有
路由配置 routePrefix路由前缀,必须含有Odata字符串,否则路由不到Odata控制器。 V1表示版本,可以使用这种方式进行版本控制,也可以使用其他方式。...config.Count().Filter().OrderBy().Expand().Select().MaxTop(null);这样配置使Odata操作符可用(Web Api2的旧版本不必如此设置)。...public static class WebApiConfig { public static void Register(HttpConfiguration config)...IgnoreApi = true)] ,[ODataFormatting],[ODataRouting]这三个特性,由于[ApiExplorerSettings(IgnoreApi = true)] 的影响,在System.Web.Http.Description.ApiDescription...实例中不包含继承自ODataController的控制器;控制器方法使用了[EnableQuery]修饰后才可支持Odata操作符。
这种异常会返回你在异常构造器中指定的任何HTTP状态码。例如,在以下方法中,如果这个id参数无效,那么会返回“404——未找到”。...ASP.NET Web API中的异常过滤器与Asp.Net MVC中的是极为类似的。然后,他们被声明在不同的命名空间中,且功能也是独立的。...应用程序”项目模板创建的项目,要把你的Web API配置代码被放在WebApiConfig类中,它位于App_Start文件夹: public static class WebApiConfig {...)... } } HttpError——HTTP错误 HttpError对象为在响应正文中返回错误消息提供了相应的方式。...下一篇文章将来讲解Web API2中新增加的一个亮点机制————属性路由,貌似很牛逼的样子。
(); // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute...是个静态类中,我们在其中创建了静态注册方法Register,在方法内,我们主要在做一件事,那就是为HttpConfiguration对象做配置。...而在配置中,我们将WepApi的路由配置成了webapi/{controller}/{id},也就是说,我们的WebApi未来的访问地址将为【http://localhost:5180/webapi/Login...在WebApiConfig类中,我们还用到了这样一个类WebApiAttribute,我们在为HttpConfiguration对象的Filters属性,添加了这个类的对象。...配置文件 WebApiConfig编写结束了,现在,我们需要将这个静态类注册到项目中。
该书主要分为两部分,ASP.NET MVC 5、ASP.NET WEB API2。本书最大的特点是以面试问答的形式进行展开。通读此书,会帮助你对ASP.NET MVC有更深层次的理解。...默认来说,如果在layout中定义了需要渲染的section,那么在view中就必须实现。但可以通过以下方式,限定section是可选的。...通过在Global.asax.cs文件中修改BundleTable的EnableOptimizations属性来打开和关闭捆绑优化。...App_Start文件夹是从MVC4引入的,包含以下配置文件,比如 BundleConfig.cs, FilterConfig.cs,RouteConfig.cs,WebApiConfig.cs 。...WebApiConfig.cs - 用来注册不同的WEB API 路由,也可用来设置额外的WEB API 配置选项。 Q49. ASP.NET MVC中返回/呈现一个View都有哪几种方式?
这里从URI获取值具体指:从路由词典中获取值或者从URI的查询字符串中获取值。具体过程见介绍路由那篇博文。 2)对于复杂类型,Web API会使用多媒体格式化器从消息体中获得值。...这样即使操作(Action)参数是复杂类型,框架也会中URI中取值来为参数赋值。 使用[FromBody] 为了强制Web API从消息体中取值,可以使用FromBody特性。...这样即使操作(Action)参数是简单类型,框架也会从消息体中取值来为参数赋值。当使用FromBody特性时,Web API使用请求的Content-Type标头来选择格式化器。...默认的值提供器从请求URI的查询字符串和路由词典中获取值。要绑定的参数的名称保存在ModelBindingContext.ModelName属性中,模型绑定器在词典中找相应的键值对。...这里从URI获取值具体指:从路由词典中获取值或者从URI的查询字符串中获取值。具体过程见介绍路由那篇博文。对于复杂类型,Web API会使用多媒体格式化器从消息体中获得值。
本文已同步到Web API2系列文章中http://www.cnblogs.com/aehyok/p/3446289.html。 ...OData的还定义了一个方法来公开元数据有关的数据。客户端可以使用元数据来发现类型信息和关系的数据集。ASP.NET Web API OData可以很容易的创建OData终结点的数据集。...然后将可以看到会在项目中添加两个文件: 添加EDM和Route 在解决方案资源管理器中,打开App_Start文件夹,然后找到WebApiConfig.cs文件并打开。...用下面的代码进行替换之前默认的配置代码。...如果你想更多的来控制EDM,使用ODataModelBuilder类明确的添加属性、键、导航属性来创建EDM。 这个EntitySet 方法就是将一个实体添加到EDM实体中。
你也可以在Web API中使用MVC风格的路由。本文不需要有任何Asp.Net MVC的基础。...Routing Tables路由表 在Asp.Net Web API中,一个控制器就是一个处理HTTP请求的类,控制器的public 方法被叫做action方法或者简单的Aciton。...WebApiConfig.cs文件中定义的,该文件位于App_Start目录。...关于WebApiConfig类的更多信息参阅“配置ASP.NET Web API”(暂未实现) 如果你要自己托管(self-host )Web API,你必须直接在HttpSelfHostConfiguration...它对框架发出信号:这个方法不是一个动作,,即使它可能与路由规则匹配。 总结 本节课主要是提供了关于路由的整体概述。
在ASP.NET中,Web Api的控制器类派生于ApiController,该类与ASP.NET的Control类没有直接关系,因此不能像在Web MVC中直接使用HttpContext,Cache...不过,要在控制器类中通过HttpContext的Session属性直接使用Session状态数据,将抛出nullreference异常,网查主要有两种解决方案,一个是重载Global的init()方法,...在该方法中开放Session状态,另一个设计带Session的路由处理器 重载Global的Init() public class WebApiApplication : System.Web.HttpApplication...SessionableControllerHandler(RouteData routeData) :base(routeData) { } } 创建RouteConfig类型并配置路由...中注册配置 protected void Application_Start() { // GlobalConfiguration.Configure(WebApiConfig.Register
异常过滤器不会捕获类型为HttpResponseException的异常,下面的异常也无法被异常过滤器捕获: 1)controller构造器抛出的异常 2)消息处理器抛出的异常 3)路由过程中抛出的异常...{ public static void Register(HttpConfiguration config) { // 加载log4net配置文件...config.Services.Add(typeof(IExceptionLogger), new GlobalExceptionLogger()); } } 4某些异常无法被捕获的异常 问题描述 对于在服务加载过程中的异常...,无法通过异常过滤器,即实现了System.Web.Http.Filters.IExceptionFilter接口的过滤器来捕获,也不能通过注册ExceptionLogger来达到目的。...解决办法是在ServiceAssembliesResolver.GetAssemblies中捕获异常并记录下来。
config) { // Web API 配置和服务 // Web API 路由 config.MapHttpAttributeRoutes();...Studio中cors-demo.html上右键单击,在弹出的窗口中选择“在浏览器中查看”,Visual Studio会自动在默认的浏览器(我这里的浏览器是Firefox)中打开cors-demo.html...那现在我们就到CorsDemo.Api这个项目中去配置关于CORS的支持。不需要太多,在WebApiConfig.cs文件中配置HttpConfiguration的EnableCors方法即可。...在修改配置前,我们需要通过Nuget来新增一些引用(Microsoft.AspNet.WebApi.Cors,它的依赖包会被自动引用到项目中) 修改后的WebApiConfig.cs文件如下: using...2.在Web Api的控制器中,我们还对单个Action进行跨域访问限制,只需要在Action上设置EnableCors属性即可,如: [HttpGet] [EnableCors("http://example.com
Web API支持一种新的路由类型,被叫做属性路由。顾名思义,属性路由是用属性来创建路由。在你的Web API中属性路由可以让你更好的控制URI。你能容易的创建描述资源阶层的URIs。 ...较早的基于公约的路由风格是全面被支持的。事实上,你能够在同一个项目中联合使用这两种技术。 本文主要展示如何启用属性路由,并且描述了属性路由的各种选项,内容如下: 1、为什么使用属性路由? .../orders/1 /orders/2013/06/16 2、启用属性路由 要启用属性路由,在配置期间需要调用MapHttpAttributeRoutes。...在大多数情况下,除非在你的管道中有自定义的模型绑定,这两种表现是等价的。 7、路由名称 在Web API中,每个路由都有一个名称。路由名称被用于生成链接,你能在HTTP响应中包含一个链接。...这里是如何确定的总排序: 1.比较路由属性中的RouteName 属性。 2.在路由模版中查看每个URI片段。对于每个片段,顺序如下: 文本片段。 带有约束的路由参数。
路由过程大致分为三个阶段: 1)请求URI匹配已存在路由模板 2)选择控制器 3)选择操作 1匹配已存在的路由模板 路由模板 在WebApiConfig.Register方法中定义路由,例如模板默认生成的路由为...DefaultHttpControllerSelector查找控制器(controller)的算法为: 在路由词典中查找键为“controller”的值,找到键“controller”对应的值后,将字符串...Web API框架仅选择那些匹配请求的HTTP方法的操作,原则为: 1)指定了相应特性的操作,例如使用HttpGet特性的操作,只能匹配Get请求。...l 在参数列表中,从路由表中或请求URI查询字符串中,为每一个参数名找到一个匹配,匹配是不区分大小写的,并且不依赖于参数顺序。...设置路由名称后,可以在使用控制器(controller)的属性ApiController.Url或ApiController.Route拼接URL。
根据类路径中的jar包依赖当前项目进行自动配置 在src/main/resources的META-INF/spring.factories org.springframework.boot.autoconfigure.EnableAutoConfiguration...("/api2/copper") 用来映射web请求(访问路径和参数)、处理类和方法,可以注解在类或方法上。...produces属性: 定制返回的response的媒体类型和字符集,或需返回值是json对象 @RequestMapping(value="/api2/copper",produces="application...Spring Cloud是通过Zuul来实现的,支持自动路由映射到在Eureka Server上注册的服务。Spring Cloud提供了注解@EnableZuulProxy来启用路由代理。...具体操作是通过其两个属性name以及havingValue来实现的,其中name用来从application.properties中读取某个属性值,如果该值为空,则返回false;如果值不为空,则将该值与
它们抽象了复杂的代码,并提供一些简单的接口规则直接使用。 为什么要用API?...接下来就是我们的路由大侠了RouteConfig.vb,这里面可以配置MVC路由和API等相关路由 3.3,最后就是我们的主角WebApiConfig.vb配置API相关属性和主路由 四,最后说的就是最常用的部分控制器目录...的控制器基类,不知我们的主角,但是可以配置一个主页; 4.2 WebAPI控制器ValuesController.vb继承了ApiController的控制器基类 4.3 我们再次运行一下项目...4.3.1 看下我们的WebAPI路由,我们跟着访问即可!!...只要在App_Start目录下WebApiConfig.vb的配置文件里面添加以下代码即可实现 '配置eb API返回JSON字符串 config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling
网关程序与网站其它部分部署在一起,作为统一的Web访问入口--Web Port。在本示例解决方案中,网关代理就在 Demo.OAuth2.Port 项目上。...注意,如果配置文件配置了多个路由项目,会按照配路由项目的顺序依次匹配,直到不能配置为止, # 所以理论上可以对一个Url进行多次匹配和替换,请注意路由项目的编排顺序 # Host...8088", "Match":"/api2/", "Map":"/" } ] } 配置文件分为全局配置和路由项目配置,全局配置包含代理访问的日志信息配置,以及资源未授权访问的跳转配置...需要注意的是,路由项目的匹配不是匹配到该项目后就结束,而是会尝试匹配所有路由项目,进行多次匹配和替换,直到不能匹配为止,所以代理配置文件对于路由项目的顺序很重要,也不宜编写太多的路由配置项目。...5.2,代理获取验证码的API 由于验证服务器(地址:【localhost:50697】)验证码功能是使用Session存储的,所以需要在代理配置文件(ProxyServer.config)中的代理路由配置项目添加会话支持
我们上一大章介绍了Kubernetes的知识,本章节我们进入中间件的讲解,这里会包含很多不同的类型组件,中间件的第一个大类我这里定义的是Web服务器。...我们上一小节介绍了Nginx的配置文件以及配置文件包含一个静态网站,静态网站虽然正常的应用都有,但是Nginx的核心还是作为反向代理及负载均衡,代理后端的各种服务(Java,Go,Python等)。...所以这个小节我们就来介绍如何配置反向代理。 我们上个小节介绍了Nginx的主配置文件,介绍他可以包含下面的文件,所以我们这里就在这个目录下创建一个配置文件。...$proxy_add_x_forwarded_for; 设置代理请求中的 Host 头部,确保后端服务器能正确识别目标主机,区分虚拟主机或路由逻辑。...案例 我这里准备了一个使用python编写web的程序,提供了2个web接口,其中接口1会立即响应,而接口二则会延迟10秒才会响应,如果nginx的配置后端响应的时间下小于10秒则会请求失败,如果大于10
配置路由 public static class WebApiConfig { public static void Register(this HttpSelfHostConfiguration...{ public bool success { get; set; } public string[] errs { get; set; } } 然后在WebApiConfig...JSON序列化设置 config.RegisterJsonFormatter(); // 配置路由 config.RegisterRoutes...", defaults: new { id = RouteParameter.Optional } ); } } 然后在控制器中...JSON序列化设置 config.RegisterJsonFormatter(); // 配置路由 config.RegisterRoutes
在我们开始学习路由的自定义之前,先看一下MVC6较之于MVC5(在路由配置方面)有哪些变化。...ASP.NET MVC6将所有应用程序所必要的启动服务以及其所定义和配置的依赖关系放在Startup.cs文件中。...Startup.cs文件取代了我们之前(在MVC5中用来)存放中间件和配置逻辑的global.asax文件并实现了其所有功能。 路由活动可以通过Routes.MapRoute方法进行管理。...你还会发现在MVC6中没有专门的配置文件来处理RouteConfig.cs,WebApiConfig.cs或其他中间处理程序,这些中间处理程序在早期的ASP.NET版本和MVC项目模板中是附带的。...基于属性的路由 在控制器中编写代码来实现基于属性的路由。 article1-img2.png 基于约定的路由 在Startup.cs中编写代码来实现基于属性的路由。
ProductRepository”这个类,我们在类中实例化了ProductRepository,这就是设计的“坏味道”了,因为如下几个原因: 假如你想要使用另外一个实现替换ProductRepository...,你还要去修改ProductController类; 假如ProductRepository存在依赖,你必须在ProductController中配置他们,对于一个拥有很多控制器的大项目来说,你就配置工作将深入到任何可能的地方...; 这是很难去做单元测试的因为控制器中硬编码了对数据库的查询,对于一个单元测试,你可以在没有确切设计之前,使用一个仿制的桩存储体。...在全局的HttpConfiguration对象中DependencyResolver属性上设置依赖解析器,以下的代码使用Unity注册IProductRepository接口并且创建一个UnityResolver...,修改App_Start/WebApiConfig.cs中的Register方法 namespace Pattern.DI.MVC { public static class WebApiConfig