localhost:3412/Home/Index 区域地址:http://localhost:3412/T200/Home/Index 解决方法: 注册路由添加命名空间(namespaces)参数 (一定要是正确的)...controller = "Home", action = "Index", id = UrlParameter.Optional }, //这里很重要 一定要是正确的
最终的改动如下: // ^在正则中,一般表示匹配一行的开头,所以,我这里加了^ location ~ ^/servlet/json { } 终于ok了。...居然就匹配上了/Api/servlet/json,我不是很理解,但大家要谨慎。...proxy_pass http://$target_url; } } 所以,这里的逻辑就是: 1、先找 = 这种完全匹配的,找到就结束; 2、开始找前缀匹配这种的,没找到就算了,找到了也只是做个标记...,就用第二步里找到的location A 当然了,对于这个机制,有个小例外,就是有一种符号,可以打破这种机制: ^~ 这个符号加在前缀类型的location上,如果最长前缀的那个location,加了这个符号...,直接结束,不找正则类型的了。
路由过程大致分为三个阶段: 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)。
对象上设置路由表。...当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基本的路由机制。...它对框架发出信号:这个方法不是一个动作,,即使它可能与路由规则匹配。 总结 本节课主要是提供了关于路由的整体概述。
问题及其解决方案: 今天做项目的时候因为需要编写一个短信验证码的接口我需要在我的后台.net webapi中存入我随机生成的短信验证码方便与前端传递过来的数据对比,所以决定使用session做缓存。...让后在网上找了下原因是因为Web Api的控制器类派生自ApiControll它只继承了IHttpController, IDisposable这两个接口,与 MVC Controll类没有直接关系,因此不能像在...routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); //设置路由获取调转方式...HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required); } } /// /// 匹配...(WebApiConfig.UrlPrefixRelative); } }
但用Visual Studio创建的MVC项目通常会带很多功能,而这些功能,很多是我们并不想用的,或者我们想用其他开源控件代替它。...净化版WebApi编写 WebApiConfig 首先,引入必要的Dll,如下图所示。 ?...在WebApiConfig类中,我们还用到了这样一个类WebApiAttribute,我们在为HttpConfiguration对象的Filters属性,添加了这个类的对象。...配置文件 WebApiConfig编写结束了,现在,我们需要将这个静态类注册到项目中。...var req = System.Web.HttpContext.Current.Request; if (req.HttpMethod == "OPTIONS")//过滤options请求
可见框架自动为int型的Id赋初值0。 过载 此外当客户端所用实体属性多于服务端时,服务端会忽略多出来的属性,但建议控制器操作(Action)所用参数列表的参数或类属性与客户端所传参数完全匹配。...类型转换 默认的模型绑定规则中提及了包含类型转换器的类型也是简单类型。类型转换器可以使类也被看做简单类型。这样按照默认的规则就可以从URI中获取值来构建参数列表了。...这样即使操作(Action)参数是简单类型,框架也会从消息体中取值来为参数赋值。当使用FromBody特性时,Web API使用请求的Content-Type标头来选择格式化器。...HttpParameterBinding代表了参数与值之间的绑定关系。...3)如果没有找到就使用默认规则。 如果操作(Action)参数是简单类型,Web API框架会从URI中获取值。
如果所需的格式化器没有找到,那么Negotiate方法返回NULL,客户端会接受到406(不接受,请求资源不可访问)错误。...其次,内容协商者会查看每个格式化器,并评估其与HTTP请求的匹配程度。为了评估匹配程度,内容协商会做两件事。...Accept标头可能包含一个范围,例如"text/plain" 可以匹配 text/* 或*/*。 MediaTypeMapping类提供了匹配HTTP请求的多媒体类型的一般方法。...例如它可以匹配自定的HTTP请求头到特定的多媒体类型。 如果有多个匹配,那么选取质量因数最高的一个匹配。...如果没有匹配,内容协商者试图匹配请求消息体的多媒体类型。 如果请求包含JSON格式的数据,内容协商者会查找JSON格式化器。
较早的基于公约的路由风格是全面被支持的。事实上,你能够在同一个项目中联合使用这两种技术。 本文主要展示如何启用属性路由,并且描述了属性路由的各种选项,内容如下: 1、为什么使用属性路由? ...在该类型的路由中, 你可以定义一个或者多个被参数化字符串的模版。当这个框架接收到一个请求时,它匹配一个URI到路由模版。...config.MapHttpAttributeRoutes(); } } 你也可以将属性路由与基于公约的路由一起使用。...例如,这个路由将匹配如下的URI: http://example.com/customers/1/orders 这个URI模版可以有多个参数: [Route("customers/{customerId...8、路由顺序 当一个框架试图讲一个URI匹配到路由的时候,它会在特定的顺序下评估这些路由。为了指定这个顺序,在路由属性上设置RouteOrder 属性。较低的值将首先被评估。
大多数的客户端都可以解析JSON或XML。此外,客户端可以声明它想要通过HTTP请求消息中设置的接收标头的那种格式。 ...); 8 return item; 9 } 这个方法的名称是以Get开头但这个方法有一个名字为id的参数。...URI中包含查询字符串,这个Web API试图在控制器方法的参数中来匹配查询字符串。...请求相匹配。...Web API路由可以没有{Action},只通过HTTP请求方式来匹配路由,并且路由默认以api启示,如果想要设置,在App_Start中WebApiConfig类中进行设置路由。 ?
,然后将 http://api.rsfy.com/api/v1/User/1和http://api.rsfy.com/api/v2/User/1 转到不同的服务器处理 3.多个版本的Controller... GetControllerMapping():获取程序中所有的Api接口 SelectController(HttpRequestMessage request):匹配请求的路由...>匹配成功返回控制器信息,匹配失败返回null public HttpControllerDescriptor SelectController(HttpRequestMessage...controllers[key] : null; } 现在我们这个类实现完成以后我们便可以在WebApiConfig类中的Register方法中替换原来的IHttpControllerSelector...public static class WebApiConfig { public static void Register(HttpConfiguration config)
当Web API框架接收到一个HTTP请求时,它会试图根据路由表中的一个路由模板来匹配其URI。如果无路由匹配,客户端会接收到一个404(未找到)错误。...因为如果不注释 Web API会匹配到请求匹配的多个操作错误 ?...这个框架试图把URI路径中的片段与这个模板进行匹配。模板中文字必须严格匹配。一个占位符可以匹配任何值,除非你指定了约束。这个框架不会URI另外的部分,例如主机名或者一个查询字符串。...而且,它会排除特殊名称的方法(构造器,事件,操作符,重载符等),以及集成自ApiController的类方法 HTTP Methods Web API框架只会选择与请求的HTTP方法匹配的Action...在这种背景下,Action选择算法如下 创建该控制器中与HTTP请求方法匹配的所有Action的列表 如果路由字典有Action条目,移除与该条目值不匹配的Action 试图将Action参数与该URI
与webforms的master pages功能相似,但比其更加简单且可扩展性更强。下面是一个布局页的代码展示: 了默认的layout。...当有一系列的view具有相同的设置, 就可以使用 _ViewStart.cshtml 来放置通用的视图设置。 如果有任何视图需要修改通用的设置可以通过在view中重载通用设置指定一个新值即可。...WebApiConfig.cs - 用来注册不同的WEB API 路由,也可用来设置额外的WEB API 配置选项。 Q49. ASP.NET MVC中返回/呈现一个View都有哪几种方式?...这个类似与ASP.NET WebForm中的Response.Redirect() 。
版本控制 版本控制的方法有很多,这里提供一种将Odata与普通web api版本控制机制统一的方法,但也可以单独控制,整合控制与单独控制主要的不同是:整合控制通过VersionControllerSelector...采用此机制来控制版本,应按照如下规则命名控制器: 自定义标识符+版本+Controller 自定义标识符:能体现控制器含义的字符串 版本:表示版本的字符串,例如:V1,V1.0;不建议使用V1.0这样的写法...命名空间对应了项目文件的组织形式,控制器的命名空间为: ?...throw new HttpResponseException(HttpStatusCode.NotFound); } // 匹配控制器...IHttpControllerSelector), new NormalVersionControllerSelector(config)); ...... } } 3 同时支持Odata,与普通
注意,这里是两个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
OPTIONS" /> 针对 .NET Framework Web API,除了上面这样的设置...: //允许某些源 services.AddCors(options => { options.AddPolicy("AllowCors", policy => { // 多个可以用...我们也不该在 Get 请求使用复杂类型放在 Body 中提交 对于 .Net Framework API: 对于 Post 请求: 如果是简单类型参数,调用 API 时,默认是在 Query 中提交参数的...如果希望 Framework 以 JSON 格式返回,则需要在 WebApiConfig.cs 的 Register 方法添加如下代码: config.Formatters.Remove(config.Formatters.XmlFormatter...引入官方 Microsoft.AspNet.WebApi.Versioning package 在 WebApiConfig 的 Register 方法中添加如下代码: var constraintResolver
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的返回,而方法二是自定义返回。
前言 很久没更新博客了,加上刚过年,现在准备重新开战,继续自己的学习之路。...OData提供了一种统一的方式来组织数据,查询数据,并通过操纵CRUD操作的数据集(创建,读取,更新和删除)。 OData同时支持AtomPub(XML)和JSON格式。...您可以控制哪些操作的OData终结点支持。你可以托管多个的OData终结点,沿着非OData终结点。你可以完全的控制你的数据模型,后台业务逻辑和数据层。 ...然后将可以看到会在项目中添加两个文件: 添加EDM和Route 在解决方案资源管理器中,打开App_Start文件夹,然后找到WebApiConfig.cs文件并打开。...JSON格式的,下面我们来设置一个xml格式的。
这种异常会返回你在异常构造器中指定的任何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。
ASP.NET Web API的路由运行机制如下: (1).找到控制器,网络API将“控制器”的值 {}控制变量。 ...(2).查找的动作,网络API着眼于HTTP方法,然后寻找一个动作名称以该HTTP方法名。例如,用GET请求,WebAPI查找与“获取...”...,并把这个实例添加到与宿主相关的路由集合之中。 ...(2).将HTTP请求消息的各元素转换成控制器操作方法的参数,并将操作方法的返回值转换为有效的HTTP响应正文。...ASP.NET Web API框架支持从请求元素到操作方法参数的绑定。对于HTTP响应值转换成适当的HTTP响应消息正文。
领取专属 10元无门槛券
手把手带您无忧上云