如果您喜欢该项目,请点击。请求请求受到高度赞赏。关注我@kansiris87 以获取技术更新。
不。 | 问题 |
---|---|
1 | [什么是 REST?](#什么是 REST?) |
2 | [解释一下REST原理?](#解释一下REST原理?) |
3 | [REST 和 SOAP 有什么区别?](#REST 和 SOAP 有什么区别?) |
4 | [什么是 ASP.NET WEB API?](#什么是 ASP.NET WEB API?) |
5 | [为什么选择 ASP.NET WEB API?](#为什么选择 ASP.NET WEB API?) |
6 | [WCF 和 ASP.NET WEB API 以及 WCF REST 和 Web Service 之间有什么区别?](#WCF 和 ASP.NET WEB API 以及 WCF REST 和 Web Service 之间有什么区别?) |
7 | [WCF 和 WEB API 选哪一个?](#WCF 和 WEB API 选哪一个?) |
8 | [ASP.NET MVC 和 ASP.NET WEB API 有什么区别?](#HASP.NET MVC 和 ASP.NET WEB API 有什么区别?) |
9 | [可以使用WEB API方式返回视图吗?](#可以使用WEB API方式返回视图吗?) |
10 | [您可以像 ASP.NET MVC 一样更改 WEB API 操作名称吗?](#您可以像 ASP.NET MVC 一样更改 WEB API 操作名称吗?) |
|1 | [是否可以限制 WEB API 操作方法仅通过 HTTP GET、POST、PUT 或 DELETE 调用?](#是否可以限制 WEB API 操作方法仅通过 HTTP GET、POST、PUT 或 DELETE 调用?)| |2 | [如何在ASP.NET MVC中调用WEB API?](#如何在ASP.NET MVC中调用WEB API?)| |3 | [ASP.NET API 路由与 ASP.NET MVC 路由有何不同?](#ASP.NET API 路由与 ASP.NET MVC 路由有何不同?)| |4 | [如何在 ASP.NET WEB API2 中启用属性路由?](#如何在 ASP.NET WEB API2 中启用属性路由?)| |5 | [如何在 ASP.NET WEB API2 中定义属性路由?](#如何在 ASP.NET WEB API2 中定义属性路由?)|
REST 代表表述性状态转移。这是一种用于在分布式环境中交换数据的协议。 REST 是一种架构风格,它将每个服务视为一种资源,并通过 HTTP 协议方法(如 GET、POST、PUT 和 DELETE)访问数据。
REST 风格的架构由客户端和服务器组成。客户端向服务器发起请求,服务器处理这些请求并根据这些请求返回响应。这些请求和响应是围绕这些资源的表示的传输构建的。
REST 是一组原则,定义了如何使用 Web 标准(例如 HTTP 和 URI)。有五个重要的 REST 原则如下:
可寻址资源 - 每个资源都应由 URI(唯一标识符)标识
简单且统一的接口 - REST 基于 HTTP 协议,因此使用 HTTP GET、POST、PUT 和 DELETE 方法来执行操作。这使得 REST 变得简单且统一。
面向表征——交换资源的表征。 GET 用于返回表示,而 PUT、POST 将表示传递到服务器,以便底层资源可能发生更改。表示可以采用多种格式,例如 XML、JSON 等。
无状态通信 - 应用程序可能有状态,但服务器上没有存储客户端会话数据。任何会话特定数据应由客户端保存和维护,并根据需要随每个请求传输到服务器。
可缓存 - 客户端应该能够缓存响应以供进一步使用。
REST 和 SOAP 之间的区别如下: SOAP REST SOAP 代表简单对象访问协议 REST 代表表述性状态传输。它是一种基于 XML 的协议,构建在 HTTP 或有时是 TCP/IP、SMTP 之上。 REST 不是一种协议,而是一种架构风格,即基于资源的架构。 SOAP 具有无状态和有状态实现的规范。 REST 是完全无状态的。 SOAP 强制消息格式为 XML。 REST 不强制将消息格式设置为 XML 或 JSON。 SOAP有一个明确的标准规范。例如,WS-Security是实现安全性的规范。它没有明确的标准规范。 SOAP 消息由一个信封组成,其中包含 SOAP 标头和用于存储要发送的实际信息的正文。 REST 使用 HTTP 内置标头(具有各种媒体类型)来携带元信息,并使用 GET、POST、PUT 和 DELETE 动词来执行 CRUD 操作。 SOAP 使用接口和命名操作来公开您的服务。 REST 使用 URI 和方法(GET、PUT、POST、DELETE)来公开资源。与 REST 相比,性能较慢。与 SOAP 相比,REST 速度更快。
ASP.NET WEB API 是一个用于构建 HTTP 服务的框架,可供多种客户端(包括浏览器、手机、iPhone 和平板电脑)使用。它与 ASP.NET MVC 非常相似,因为它包含 MVC 功能,例如路由、控制器、操作结果、过滤器、模型绑定器、IOC 容器或依赖项注入。但它不是 MVC 框架的一部分。它是核心 ASP.NET 平台的一部分,可与 MVC 和其他类型的 Web 应用程序(例如 ASP.NET WebForms)一起使用。它还可以用作独立的 Web 服务应用程序。 ASP.NET WEB API 功能 1. 它支持基于约定的 CRUD 操作,因为它与 HTTP 动词 GET、POST、PUT 和 DELETE 配合使用。 2. 响应具有 Accept 标头和 HTTP 状态代码。 3. 响应由 WEB API 的 MediaTypeFormatter 格式化为 JSON、XML 或您想要添加为 MediaTypeFormatter 的任何格式。 4. 它可以接受并生成可能不是面向对象的内容,如图像、PDF 文件等。 5. 它自动支持 OData。因此,通过将新的 [Queryable] 属性放置在返回 IQueryable 的控制器方法上,客户端可以使用该方法进行 OData 查询组合。 6. 它可以托管在应用程序中或 IIS 上。 7. 它还支持 MVC 功能,例如路由、控制器、操作结果、过滤器、模型绑定器、IOC 容器或依赖项注入,使其更加简单和健壮。
如今,基于网络的应用程序不足以吸引其客户。人们非常聪明,他们在日常生活中使用 iPhone、手机、平板电脑等设备。这些设备还拥有许多让生活变得轻松的应用程序。事实上,我们正在从网络走向应用程序世界。
因此,如果您想以快速简单的方式将服务数据公开给浏览器以及所有这些现代设备应用程序,您应该拥有一个与浏览器和所有这些设备兼容的 API。
例如用于网络应用程序和电话应用程序的 twitter、facebook 和 Google API。
WEB API 是向不同设备公开数据和服务的绝佳框架。此外,WEB API 是开源的,是通过 .NET Framework 构建 REST 式服务的理想平台。与 WCF Rest 服务不同,它使用 HTTP 的完整功能(如 URI、请求/响应标头、缓存、版本控制、各种内容格式),并且与 WCF Rest 服务不同,您不需要为不同设备定义任何额外的配置设置。
如果我们需要Web Service而不需要SOAP,那么ASP.NET WEB API是最好的选择。
它用于在现有 WCF 消息管道之上构建简单的、非基于 SOAP 的 HTTP 服务。
它没有像 WCF REST 服务那样繁琐且广泛的配置。
使用 WEB API 轻松创建服务。使用 WCF REST 服务,创建服务很困难。
它仅基于 HTTP,并且易于以 REST-ful 方式定义、公开和使用。
它是轻量级架构,适合智能手机等带宽有限的设备。
它是开源的。
.NET 框架拥有许多允许您创建 HTTP 服务的技术,例如 Web 服务、WCF 和现在的 WEB API。这四者之间有以下区别:
网络服务
它基于 SOAP 并以 XML 形式返回数据。
它仅支持 HTTP 协议。
它不是开源的,但任何理解 xml 的客户端都可以使用。
它只能托管在 IIS 上。
世界碳纤维
它也是基于 SOAP 并以 XML 形式返回数据。
它是 Web 服务 (ASMX) 的演变,支持 TCP、HTTP、HTTPS、命名管道、MSMQ 等各种协议。
WCF 的主要问题是其繁琐且广泛的配置。
它不是开源的,但任何理解 xml 的客户端都可以使用。
它可以托管在应用程序或 IIS 上或使用窗口服务。
WCF休息
要将 WCF 用作 WCF Rest 服务,您必须启用 webHttpBindings。
它分别通过 [WebGet] 和 [WebInvoke] 属性支持 HTTP GET 和 POST 动词。
要启用其他 HTTP 动词,您必须在 IIS 中进行一些配置,以接受 .svc 文件上特定动词的请求
使用 WebGet 通过参数传递数据需要配置。必须指定 UriTemplate
它支持XML、JSON和ATOM数据格式。
网络应用程序接口
这是一个以简单的方式构建 HTTP 服务的新框架。
WEB API 是开源的,是通过 .NET Framework 构建 REST 式服务的理想平台。
与 WCF Rest 服务不同,它使用 HTTP 的完整功能(如 URI、请求/响应标头、缓存、版本控制、各种内容格式)
它还支持 MVC 功能,例如路由、控制器、操作结果、过滤器、模型绑定器、IOC 容器或依赖项注入、单元测试,使其更加简单和健壮。
它可以托管在应用程序中或 IIS 上。
它是轻量级架构,适合智能手机等带宽有限的设备。
响应由 WEB API 的 MediaTypeFormatter 格式化为 JSON、XML 或您想要添加为 MediaTypeFormatter 的任何格式。
以下几点可帮助您在 WCF 和 WEB API 之间进行选择:
当您想要创建一项支持特殊场景(例如单向消息传递、消息队列、双工通信等)的服务时,请选择 WCF。
当您想要创建一个可以使用可用的快速传输通道(例如 TCP、命名管道,甚至 UDP(在 WCF 4.5 中))的服务,并且您还希望在所有其他传输通道不可用时支持 HTTP 时,请选择 WCF。
当您想要通过 HTTP 创建面向资源的服务并可以使用 HTTP 的全部功能(例如 URI、请求/响应标头、缓存、版本控制、各种内容格式)时,请选择 WEB API。
当您想要向广泛的客户端(包括浏览器、手机、iPhone 和平板电脑)公开您的服务时,请选择 WEB API。
ASP.NET MVC 和 WEB API 之间存在以下差异:
ASP.NET MVC 用于创建同时返回视图和数据的 Web 应用程序,而 ASP.NET WEB API 用于创建完整的 HTTP 服务,其方式简单且仅返回数据而不返回视图。
WEB API 有助于在 .NET Framework 上构建 REST-ful 服务,并且还支持内容协商(这是关于确定客户端可以接受的最佳响应格式数据。它可以是 JSON、XML、ATOM 或其他格式的数据),自托管,不属于 MVC。
WEB API 还负责返回特定格式的数据,例如 JSON、XML 或基于请求中的 Accept 标头的任何其他格式,您不必担心这一点。 MVC 仅使用 JsonResult 返回 JSON 格式的数据。
在 WEB API 中,请求根据 HTTP 动词映射到操作,但在 MVC 中,它映射到操作名称。
ASP.NET WEB API 是新的框架,是核心 ASP.NET 框架的一部分。 WEB API 中存在的模型绑定、过滤器、路由和其他 MVC 功能与 MVC 不同,存在于新的 System.Web.Http 程序集中。在 MVC 中,这些功能存在于 System.Web.Mvc 中。因此,WEB API 也可以与 ASP.NET 一起使用并作为独立的服务层。
您可以在单个项目中混合 WEB API 和 MVC 控制器来处理高级 AJAX 请求,这些请求可能返回 JSON、XML 或任何其他格式的数据并构建完整的 HTTP 服务。通常,这称为 WEB API 自托管。
当您混合使用 MVC 和 WEB API 控制器并且想要实现授权时,您必须创建两个过滤器,一个用于 MVC,另一个用于 WEB API,因为两者是不同的。
此外,WEB API是轻量级架构,除了Web应用程序之外,它还可以与智能手机应用程序一起使用。
与 ASP.NET MVC 不同,WEB API 仅用于返回数据。数据可以是字符串、JSON、XML、文本等。它不能像 ASP.NET MVC 那样返回 View。
与 ASP.NET MVC 一样,您还可以使用 ActionName 属性更改 WEB API 操作名称,如下所示:
[HttpGet] [ActionName("GetProducts")] public IEnumerable ProductList() { return db.Products.AsEnumerable(); }
与 ASP.NET MVC 一样,您还可以通过应用 HttpGet 或 HttpPost 或 HttpPut 或 HttpDelete 属性来限制 WEB API 操作方法仅由特定 HTTP 请求调用。
如果您只想限制 HTTP Get 请求的操作方法,请使用 HttpGet 操作方法选择器属性对其进行修饰,如下所示:
[HttpGet] public IEnumerable ProductList() { return db.Products.AsEnumerable(); }
可以使用HttpClient和WEB API地址调用ASP.NET WEB API,如下所示:
公共类 ProductController : 控制器 { HttpClient Client = new HttpClient(); Uri BaseAddress = new Uri("http://localhost:131/");公共 ActionResult Index() { Client.BaseAddress = BaseAddress; HttpResponseMessage 响应 = Client.GetAsync("productservice/GetProducts").Result; if (response.IsSuccessStatusCode) { var data = response.Content.ReadAsAsync<IEnumerable>().Result;返回视图(数据);返回视图(); } }
ASP.NET MVC 和 ASP.NET WEB API 都使用路由来监视传入请求,并且至少定义一个路由才能发挥作用。这两种路由的区别如下:
在 WEB API 路由模式中,{action} 参数是可选的,但您可以包含 {action} 参数。在 ASP.NET MVC 中,{action} 参数是必需的。
API 控制器中定义的操作方法必须具有 HTTP 操作动词(GET、POST、PUT、DELETE)属性,或者具有 HTTP 操作动词之一作为操作方法名称的前缀。在 ASP.NET MVC 中,默认情况下,可以通过 HTTP GET 或 POST 动词调用操作方法,并且要使用其他 HTTP 动词,您需要将其定义为属性。
与 ASP.NET MVC 不同,Web API 只能接收一种复杂类型作为参数。
在 ASP.NET WEB API2 中启用属性路由很简单,只需在 WebApiConfig.cs 文件的 Register() 方法中添加对 MapHttpAttributeRoutes() 方法的调用即可。
public static class WebApiConfig { public static void Register(HttpConfiguration config) { //启用属性路由 config.MapHttpAttributeRoutes(); } }
您还可以将属性路由与基于约定的路由结合起来。
公共静态类 WebApiConfig { 公共静态 void Register(HttpConfiguration config) {
//启用属性路由 config.MapHttpAttributeRoutes(); // 基于约定的路由。 config.Routes.MapHttpRoute( name: "DefaultApi",
RouteTemplate: "api/{controller}/{id}", 默认值: new { id = RouteParameter.Optional });
} }
与 ASP.NET MVC5 一样,您也可以在 WEB API2 中在控制器级别和操作级别定义属性路由,如下所示:
[RoutePrefix("Service/User")] public class UserController : ApiController { //GET 路由:api/User public IEnumerable Get() { return new string[] { "value1", "value2" };
}
[Route("{id}")] //GET 路由:Service/User/1 public string Get(int id) { return "value"; }
[Route("")] //POST 路由:服务/用户/ public void Post([FromBody]string value) { } }
• 操作级别路由- 您可以在操作级别定义路由,应用于控制器中的特定操作。
public class UserController : ApiController { //GET 路由: api/User
public IEnumerable Get() { return new string[] { "value1", "value2" };
}
[Route("Service/User/{id}")] //GET 路由:Service/User/1 public string Get(int id) { return "value"; } [Route("Service/User/")] //POST 路由:Service/User/ public void Post([FromBody]string value) { } }