[英]Restful Web Service using C#
我被指派提出一个接收和发布数据的Web服务。 但是,我对此并不陌生,即使在查找了多个示例并尝试遵循它们之后,我仍然很难理解。
参考示例:
以下是我作为模型和控制器的参考提供的代码:
模型
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks;
namespace Webservice.Models.ApiModels {
public class SecondlyReading {
[Key]
public int Id { get; set; }
[Required]
public int Name { get; set; }
[Required]
public string TimeStamp { get; set; }
[Required]
public string Date { get; set; }
[Required]
}
}
调节器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Http;
using SmartDBWeb.Data;
using Microsoft.AspNetCore.Authorization;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using SmartDBWeb.Models.ApiModels;
using Microsoft.EntityFrameworkCore;
namespace Webservice.Controllers.Api {
[Route("api/[controller]")]
[Authorize]
public class WebserviceController : Controller {
private ApplicationDbContext _context;
public WebserviceController(ApplicationDbContext context) {
_context = context;
}
// GET: api/Webservice
[HttpGet]
public IEnumerable<Webservice> GetSecondlyReadings() {
return _context.Webservice.ToList();
}
// GET api/Webservice/id
[HttpGet("{id}")]
public async Task<IActionResult> GetWebservice(int id) {
var reading = await _context.Webservice.SingleOrDefaultAsync(c => c.Id == id);
if (reading == null) {
return NotFound();
}
return Ok(reading);
}
[HttpPost]
public IActionResult PostWebservice([FromBody]List<Webservice> Readings) {
if (!ModelState.IsValid) {
return BadRequest();
}
foreach (Webservice reading in Readings) {
_context.Webservice.Add(reading);
}
_context.SaveChanges();
return CreatedAtAction("GetWebservice", new { id = Readings[0].Id }, Readings[0]);
}
}
}
我的主要问题是上述代码的使用通常如何工作。 我发现(可能不正确)的是,模型是数据本身,而控制器将模型和视图链接在一起。
首先问自己网络通信通常如何工作。 当通过浏览器输入地址访问任何网站时,幕后实际上发生了什么?
我发现非常有用的是在浏览器中打开一个新标签,并使用开发人员工具(例如,右键单击任何地方,然后单击“检查”),通过切换到网络标签来观察流量。 访问您选择的网站,例如:Wikipedia.org。
现在,一堆东西还在进行,但是您对网络通信列表中第一个新条目感兴趣,该条目应为“ www.wikipedia.org”。 点击那个。
现在,您应该查看“标头”标签,尤其是请求标头。 有两个重要领域:
让我们回到您的源代码。
上面提供的是Model类和Controller类。
您的模型是一个数据结构,表示Web应用程序中的资源。 ID,名称,时间戳,日期是该资源的属性。 根据您的实际用例,您要创建,使用,更新或删除此模型类型的对象,并确定其属性值。
为了允许您的客户这样做,您需要一个控制器类。 这是“映射”到的所有Web请求的入口点:
[Route("api/[controller]")]
Map表示,当客户的请求网址(记住我们的示例“ www.wikipedia.org”)与您在Route中定义的字符串匹配时,将使用此控制器类(注意:[controller]将替换为实际名称)控制器类的名称,在本例中为“ Webservice”。
在您的控制器中定义Actions 。 根据客户端请求的请求URL和请求方法(参见上文),您的Web框架将决定调用哪个操作。
[HttpGet]
这映射到URL api/Webservice
的GET请求。 动作的返回类型是List,这意味着应该返回多个对象。 在您的情况下,当客户端访问api/Webservice
,将返回_context.Webservice
中的所有对象。
[HttpGet("{id}")]
这也映射到GET请求,但是这一次它需要一个所谓的Query Parameter 。 这是您的客户提供的一条附加信息,以使其请求更加具体。 例如,他们可能正在请求api/Webservice?id=1
,这将要求您返回ID为1的对象。
[HttpPost]
这映射到POST请求,并要求您插入或更新对象。 [FromBody]
告诉请求处理器将所谓的请求 [FromBody]
转换为给定类型的对象。 请求主体是您的客户端将整个对象(例如,以JSON格式转换)放置到它们要提交到服务器的位置。
现在,我希望这会使您的代码示例更清晰。 您还提到了View ,所以我将快速解释一下这是什么:通常,在对服务器进行请求之后,您将以某种答案进行响应。 在最简单的情况下, 响应状态会告诉客户端一切是否顺利。 对于GET请求,通常会在Response Body中返回一个对象。 您返回的内容称为视图。 在您的示例中:
return Ok(reading);
将从数据库中检索到的对象转换为机器可读格式(例如JSON),并向其添加响应状态“ 200 OK”。 这已发送给您的客户。
因此,这应该使您对Web框架的工作原理有一个很好的了解。 我希望我能为您提供较长的阅读帮助。 让我知道是否可以澄清任何事情。
模型:基本上是数据库的表结构。 因此,无论何时创建对象并设置值并将对象插入数据库中。 控制器:用于处理HTTP调用并将业务逻辑与视图链接。
[HTTPGET]
这将映射到对URL api / Webservice的GET请求,而没有任何查询参数。 动作返回类型是一个列表,这意味着应该返回多个对象。 在您的情况下,当客户端访问api / Webservice时,将返回_context.Webservice中的所有对象。
[HTTPGET( “(编号)”)]
这也映射到GET请求,但是这一次它需要一个所谓的查询参数。 这是您的客户提供的一条附加信息,以使其请求更加具体。 例如,他们可能正在请求api / Webservice?id = 1,这将要求您返回ID为1的对象。
[HttpPost]
这映射到POST请求,并要求您插入或更新对象。 [FromBody]告诉请求处理器将所谓的请求正文转换为给定类型的对象。 请求主体是您的客户端将整个对象(例如,以JSON格式转换)放置到它们要提交到服务器的位置。 因此,对于模型
public class SecondlyReading {
[Key]
public int Id { get; set; }
[Required]
public int Name { get; set; }
[Required]
public string TimeStamp { get; set; }
[Required]
public string Date { get; set; }
}
这将创建一个以Id作为主键的数据表,因为您正在使用[Key]属性。
private ApplicationDbContext _context;
这用于创建数据库上下文。 您可能还在ApplicationDbContext类中创建了以下内容
public DbSet<SecondlyReading> WebService{get; set;}
它将创建一个名称为WebService的DbSet。
在WEB API中, POST用于插入新数据。 因此,此处的POST中的API api / webservice将用于插入数据。 您可以使用任何CLIENT(如POSTMAN或ARC)插入数据。 您必须在HTTP调用的请求正文中设置数据。 API的响应可以是JSON或XML,具体取决于您的输出。
我认为最好阅读基础知识,这样您才能了解Web API的正常工作方式以进行自读https://www.asp.net/web-api
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.