首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

nginx中一个请求匹配到多个location时的优先级是怎样的,这把马失前蹄了

最终的改动如下: // ^在正则中,一般表示匹配一行的开头,所以,我这里加了^ location ~ ^/servlet/json { } 终于ok了。...居然就匹配上了/Api/servlet/json,我不是很理解,但大家要谨慎。...proxy_pass http://$target_url; } } 所以,这里的逻辑就是: 1、先找 = 这种完全匹配的,找到就结束; 2、开始找前缀匹配这种的,没找到就算了,找到了也只是做个标记...,就用第二步里找到的location A 当然了,对于这个机制,有个小例外,就是有一种符号,可以打破这种机制: ^~ 这个符号加在前缀类型的location上,如果最长前缀的那个location,加了这个符号...,直接结束,不找正则类型的了。

1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ASP.NET Web API编程——路由

    路由过程大致分为三个阶段: 1)请求URI匹配已存在路由模板 2)选择控制器 3)选择操作 1匹配已存在的路由模板 路由模板 在WebApiConfig.Register方法中定义路由,例如模板默认生成的路由为...根据获得的控制器(Controller)名查找Web API中的控制器(controller)。如果没有查找到控制器(controller)名或者匹配到了多个,那么返回错误。...Web API框架仅选择那些匹配请求的HTTP方法的操作,原则为: 1)指定了相应特性的操作,例如使用HttpGet特性的操作,只能匹配Get请求。...ApiControllerActionSelector选择控制器(controller)操作的算法如下: 1)创建一个链表,链表元素为所有与HTTP请求相匹配的操作(Action)。...l 选择一个操作(Action),其参数列表中的每一个参数在请求URI中都对应一个值。 l 如果有多个操作(Action)满足以上规则,选择有最多参数匹配的一个操作(Action)。

    1.8K80

    Asp.Net Web API 2第五课——Web API路由

    对象上设置路由表。...当Web API框架接收一个HTTP请求时,它会试图根据路由表中的一个路由模板来匹配其URI。如果无路由匹配,客户端会接收到一个404(未找到)错误。...例如,以下URI与这个默认路由的匹配: /api/contacts /api/contacts/1 /api/products/gizmo1 然而,以下URI不匹配,因为它缺少“api”片段: /contacts...另外要注意,POST请求是失败的,因为该控制器未定义“Post…”方法。 Routing Variations路由变化  上一节描述了ASP.NET Web API基本的路由机制。...它对框架发出信号:这个方法不是一个动作,,即使它可能与路由规则匹配。 总结  本节课主要是提供了关于路由的整体概述。

    1.2K50

    ASP.NET Web API编程——模型验证与绑定

    可见框架自动为int型的Id赋初值0。 过载 此外当客户端所用实体属性多于服务端时,服务端会忽略多出来的属性,但建议控制器操作(Action)所用参数列表的参数或类属性与客户端所传参数完全匹配。...类型转换 默认的模型绑定规则中提及了包含类型转换器的类型也是简单类型。类型转换器可以使类也被看做简单类型。这样按照默认的规则就可以从URI中获取值来构建参数列表了。...这样即使操作(Action)参数是简单类型,框架也会从消息体中取值来为参数赋值。当使用FromBody特性时,Web API使用请求的Content-Type标头来选择格式化器。...HttpParameterBinding代表了参数与值之间的绑定关系。...3)如果没有找到就使用默认规则。 如果操作(Action)参数是简单类型,Web API框架会从URI中获取值。

    3K50

    ASP.NET Web API编程——序列化与内容协商

    如果所需的格式化器没有找到,那么Negotiate方法返回NULL,客户端会接受到406(不接受,请求资源不可访问)错误。...其次,内容协商者会查看每个格式化器,并评估其与HTTP请求的匹配程度。为了评估匹配程度,内容协商会做两件事。...Accept标头可能包含一个范围,例如"text/plain" 可以匹配 text/* 或*/*。 MediaTypeMapping类提供了匹配HTTP请求的多媒体类型的一般方法。...例如它可以匹配自定的HTTP请求头到特定的多媒体类型。 如果有多个匹配,那么选取质量因数最高的一个匹配。...如果没有匹配,内容协商者试图匹配请求消息体的多媒体类型。 如果请求包含JSON格式的数据,内容协商者会查找JSON格式化器。

    2.5K60

    Asp.Net Web API 2第八课——Web API 2中的属性路由

    较早的基于公约的路由风格是全面被支持的。事实上,你能够在同一个项目中联合使用这两种技术。   本文主要展示如何启用属性路由,并且描述了属性路由的各种选项,内容如下:   1、为什么使用属性路由?   ...在该类型的路由中, 你可以定义一个或者多个被参数化字符串的模版。当这个框架接收到一个请求时,它匹配一个URI到路由模版。...config.MapHttpAttributeRoutes(); } } 你也可以将属性路由与基于公约的路由一起使用。...例如,这个路由将匹配如下的URI: http://example.com/customers/1/orders 这个URI模版可以有多个参数: [Route("customers/{customerId...8、路由顺序    当一个框架试图讲一个URI匹配到路由的时候,它会在特定的顺序下评估这些路由。为了指定这个顺序,在路由属性上设置RouteOrder 属性。较低的值将首先被评估。

    88640

    Asp.Net Web API(三)

    当Web API框架接收到一个HTTP请求时,它会试图根据路由表中的一个路由模板来匹配其URI。如果无路由匹配,客户端会接收到一个404(未找到)错误。...因为如果不注释 Web API会匹配到请求匹配的多个操作错误 ?...这个框架试图把URI路径中的片段与这个模板进行匹配。模板中文字必须严格匹配。一个占位符可以匹配任何值,除非你指定了约束。这个框架不会URI另外的部分,例如主机名或者一个查询字符串。...而且,它会排除特殊名称的方法(构造器,事件,操作符,重载符等),以及集成自ApiController的类方法 HTTP Methods     Web API框架只会选择与请求的HTTP方法匹配的Action...在这种背景下,Action选择算法如下 创建该控制器中与HTTP请求方法匹配的所有Action的列表 如果路由字典有Action条目,移除与该条目值不匹配的Action 试图将Action参数与该URI

    1.7K50

    asp.net web api 版本控制

    版本控制 版本控制的方法有很多,这里提供一种将Odata与普通web api版本控制机制统一的方法,但也可以单独控制,整合控制与单独控制主要的不同是:整合控制通过VersionControllerSelector...采用此机制来控制版本,应按照如下规则命名控制器: 自定义标识符+版本+Controller 自定义标识符:能体现控制器含义的字符串 版本:表示版本的字符串,例如:V1,V1.0;不建议使用V1.0这样的写法...命名空间对应了项目文件的组织形式,控制器的命名空间为: ?...throw new HttpResponseException(HttpStatusCode.NotFound); } // 匹配控制器...IHttpControllerSelector), new NormalVersionControllerSelector(config));         ......      } } 3 同时支持Odata,与普通

    1.8K60

    支持Ajax跨域访问ASP.NET Web Api 2(Cors)的简单示例教程演示

    注意,这里是两个Web网站项目了,前端项目主要负责界面的呈现和一些前端的相应业务逻辑处理,而Web Api则负责提供数据。...这样问题就来了,如果前端通过ajax访问Web Api项目话,就涉及到跨域了。我们知道,如果直接访问,正常情况下Web Api是不允许这样做的,这涉及到安全问题。...,我们可以看到数据跨域加载成功了 好了,这篇关于ASP.NET Web Api支持跨域请求的示例和演示就完成了。...几点补充: 1.EnableCorsAttribute构造函数中的参数可以根据自己情况进行设置,比如origins,当其为”*”时,所以的域都可访问api的资源,如果你只想要指定的域可访问资源,则指定到具体的域即可...2.在Web Api的控制器中,我们还对单个Action进行跨域访问限制,只需要在Action上设置EnableCors属性即可,如: [HttpGet] [EnableCors("http://example.com

    1.2K90

    WebAPI返回JSON

    web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法:  方法一:(改配置法)  找到Global.asax文件,在Application_Start...json类型了,但有个不好的地方,如果返回的结果是String类型,如123,返回的json就会变成"123"; 解决的方法是自定义返回类型(返回类型为HttpResponseMessage) public...)  方法一最简单,但杀伤力太大,所有的返回的xml格式都会被毙掉,那么方法三就可以只让api接口中毙掉xml,返回json  先写一个处理返回的类: public class JsonContentNegotiator...App_Start中的WebApiConfig.cs文件,打开找到Register(HttpConfiguration config)方法  添加以下代码: var jsonFormatter = new...其实WebApi会自动把返回的对象转为xml和json两种格式并存的形式,方法一与方法三是毙掉了xml的返回,而方法二是自定义返回。

    3.5K20

    Asp.Net Web API 2第十七课——Creating an OData Endpoint in ASP.NET Web API 2(OData终结点)

    前言   很久没更新博客了,加上刚过年,现在准备重新开战,继续自己的学习之路。...OData提供了一种统一的方式来组织数据,查询数据,并通过操纵CRUD操作的数据集(创建,读取,更新和删除)。   OData同时支持AtomPub(XML)和JSON格式。...您可以控制​​哪些操作的OData终结点支持。你可以托管多个的OData终结点,沿着非OData终结点。你可以完全的控制你的数据模型,后台业务逻辑和数据层。   ...然后将可以看到会在项目中添加两个文件: 添加EDM和Route 在解决方案资源管理器中,打开App_Start文件夹,然后找到WebApiConfig.cs文件并打开。...JSON格式的,下面我们来设置一个xml格式的。

    97931

    Asp.Net Web API 2第七课——Web API异常处理

    这种异常会返回你在异常构造器中指定的任何HTTP状态码。例如,在以下方法中,如果这个id参数无效,那么会返回“404——未找到”。...ASP.NET Web API中的异常过滤器与Asp.Net MVC中的是极为类似的。然后,他们被声明在不同的命名空间中,且功能也是独立的。...“ASP.NET MVC 4 Web应用程序”项目模板创建的项目,要把你的Web API配置代码被放在WebApiConfig类中,它位于App_Start文件夹: public static class...// Other configuration code(其它配置代码)... } } HttpError——HTTP错误 HttpError对象为在响应正文中返回错误消息提供了相应的方式...但如果所请求的产品未找到,则HTTP响应会在请求体中包含一个HttpError。

    89830
    领券