ASP.NET Core RESTful Web服务开发教程

在本文中,我将逐步解释如何在ASP.NET Core中开发基于RESTful的Web服务应用程序。ASP.NET Core是微软最新发布的技术,比之前的WCF和Web API要好得多。

前提:

1、下载最新版本的Microsoft Visual Studio。他们有一个用于实践的免费许可版本。

2、为了测试这个应用程序,下载SOAPUI工具,因为我们将使用SOAPUI工具来测试所有服务。

让我们一步一步的开始我们的项目:

步骤1:首先,创建一个ASP.NET Core Web应用程序项目在Visual Studio中命名为StudentRegistrationDemo3。为此,选择File->New->Project->ASP.NET Core Web应用程序(参见下面的窗口)并单击OK。

一旦您单击OK按钮,你会看到下面的窗口,你需要选择Web应用程序,取消配置HTTPS的复选框(否则,它将创建一个基于ssl的项目,你必须使用HTTPS instad在你的所有url的HTTP测试)并单击OK按钮。

单击OK按钮后,将创建以下项目结构:

步骤2:现在需要在项目中添加两个文件夹:一个用于Models,另一个用于Controllers。Models 文件夹用于资源类,Controllers文件夹用于控制器类;这是这个项目所需要的。右键点击你的项目, Add=>New Folder 并相应地重新命名。

最后,您的项目结构如下:

步骤3:现在,我们将创建以下资源类来处理GET、POST、PUT和DELETE服务。右键单击project explorer窗口中的Models文件夹,选择Add=>Class(参见下面):

现在修改Student Class如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace StudentRegistrationDemo3.Models
{
 public class Student
 {
 String name;
 public String Name
 {
 get { return name; }
 set { name = value; }
 }
 int age;
 public int Age
 {
 get { return age; }
 set { age = value; }
 }
 String registrationNumber;
 public String RegistrationNumber
 {
 get { return registrationNumber; }
 set { registrationNumber = value; }
 }
 }
}

现在按照上面的步骤,分别添加两个类:StudentRegistration和StudentRegistrationReply,并对它们进行如下修改:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace StudentRegistrationDemo3.Models
{
 public class StudentRegistration
 {
 List<Student> studentList;
 static StudentRegistration stdregd = null;
 private StudentRegistration()
 {
 studentList = new List<Student>();
 }
 public static StudentRegistration getInstance()
 {
 if (stdregd == null)
 {
 stdregd = new StudentRegistration();
 return stdregd;
 }
 else
 {
 return stdregd;
 }
 }
 public void Add(Student student)
 {
 studentList.Add(student);
 }
 public String Remove(String registrationNumber)
 {
 for (int i = 0; i < studentList.Count; i++)
 {
 Student stdn = studentList.ElementAt(i);
 if (stdn.RegistrationNumber.Equals(registrationNumber))
 {
 studentList.RemoveAt(i);//update the new record
 return "Delete successful";
 }
 }
 return "Delete un-successful";
 }
 public List<Student> getAllStudent()
 {
 return studentList;
 }
 public String UpdateStudent(Student std)
 {
 for (int i = 0; i < studentList.Count; i++)
 {
 Student stdn = studentList.ElementAt(i);
 if (stdn.RegistrationNumber.Equals(std.RegistrationNumber))
 {
 studentList[i] = std;//update the new record
 return "Update successful";
 }
 }
 return "Update un-successful";
 }
 }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace StudentRegistrationDemo3.Models
{
 public class StudentRegistrationReply
 {
 String name;
 public String Name
 {
 get { return name; }
 set { name = value; }
 }
 int age;
 public int Age
 {
 get { return age; }
 set { age = value; }
 }
 String registrationNumber;
 public String RegistrationNumber
 {
 get { return registrationNumber; }
 set { registrationNumber = value; }
 }
 String registrationStatus;
 public String RegistrationStatus
 {
 get { return registrationStatus; }
 set { registrationStatus = value; }
 }
 }
}

步骤4:现在是引入控制器类来处理我们的GET、POST、PUT和DELETE web请求的时候了。在本例中,我们将为GET、POST、PUT和DELETE请求创建单独的Controller,尽管这不是必须的,但为了更清楚起见,我使用了单独的Controller。即使一个Controller也可以满足上述所有服务,但是,按照良好的设计原则,我们应该有一个单独的Controller,以便易于维护和调试应用程序。

让我们先从GET和POST请求开始。单击Controllers文件夹并选择Add=>New Item,然后选择API Controller类并创建一个名为StudentRetriveController的控制器类,用于处理GET请求,如下所示。

并修改控制器类如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using StudentRegistrationDemo3.Models;
namespace StudentRegistrationDemo2.Controllers
{
 [Route("api/[controller]")]
 [ApiController]
 public class StudentRetriveController : Controller
 {
 // GET: api/<controller>
 [HttpGet]
 public List<Student> GetAllStudents()
 {
 return StudentRegistration.getInstance().getAllStudent();
 }
 [HttpGet("GetAllStudentRecords")]
 public JsonResult GetAllStudentRecords()
 {
 return Json(StudentRegistration.getInstance().getAllStudent());
 }
 }
}

现在,按照上面的步骤,添加一个控制器类StudentRegistrationController来处理POST请求和修改类,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using StudentRegistrationDemo3.Models;
namespace StudentRegistrationDemo3.Controllers
{
 [Route("api/[controller]")]
 [ApiController]
 public class StudentRegistrationController : Controller
 {
 // POST: api/<controller>
 [HttpPost]
 public StudentRegistrationReply RegisterStudent(Student studentregd)
 {
 Console.WriteLine("In registerStudent");
 StudentRegistrationReply stdregreply = new StudentRegistrationReply();
 StudentRegistration.getInstance().Add(studentregd);
 stdregreply.Name = studentregd.Name;
 stdregreply.Age = studentregd.Age;
 stdregreply.RegistrationNumber = studentregd.RegistrationNumber;
 stdregreply.RegistrationStatus = "Successful";
 return stdregreply;
 }
 [HttpPost("InsertStudent")]
 public IActionResult InsertStudent(Student studentregd)
 {
 Console.WriteLine("In registerStudent");
 StudentRegistrationReply stdregreply = new StudentRegistrationReply();
 StudentRegistration.getInstance().Add(studentregd);
 stdregreply.Name = studentregd.Name;
 stdregreply.Age = studentregd.Age;
 stdregreply.RegistrationNumber = studentregd.RegistrationNumber;
 stdregreply.RegistrationStatus = "Successful";
 return Ok(stdregreply);
 }
 [Route("student/")]
 [HttpPost("AddStudent")]
 public JsonResult AddStudent(Student studentregd)
 {
 Console.WriteLine("In registerStudent");
 StudentRegistrationReply stdregreply = new StudentRegistrationReply();
 StudentRegistration.getInstance().Add(studentregd);
 stdregreply.Name = studentregd.Name;
 stdregreply.Age = studentregd.Age;
 stdregreply.RegistrationNumber = studentregd.RegistrationNumber;
 stdregreply.RegistrationStatus = "Successful";
 return Json(stdregreply);
 }
 }
}

我们完成了第一阶段,现在是测试应用程序的时候了

步骤5:在Visual Studio菜单栏中,可以看到一个绿色箭头按钮。在这里,您可以选择安装在系统中的浏览器并单击它。它将启动web服务器并运行web服务应用程序。

现在等待,直到你的浏览器窗口加载正确如下:

现在服务器正在运行,我们将首先执行GET服务调用。

步骤6。我希望您已经在系统中安装了SOAPUI;如果没有,请从这里下载SOAPUI。现在打开应用程序,从文件菜单中选择New REST项目(文件=>New REST项目),复制粘贴下面的URL并单击OK按钮。请更改端口号63662,因为您的情况可能有所不同。

http://localhost:63662/api/studentretrive

(注意,我们使用的URL具有controller名studentretritrive (StudentRetriveController),作为 resource locator)

一旦项目被创建,只需点击绿色箭头按钮,你可以看到一个空记录文件夹如下:

原因很明显,因为我们的Student list 是空的。我们需要插入一些记录。要添加记录,我们将使用POST服务。现在让我们测试一下我们的POST service。

步骤7、按照步骤6,创建一个新的REST项目,并添加下面的URL。

http://localhost:63662/api/studentregistration

但是,这里,我们需要做一些额外的配置。首先,从方法列表中选择POST,并在媒体类型中添加记录,以便将其插入应用程序。现在,单击绿色箭头按钮,您可以看到下面的窗口。

现在,看看StudentRegistrationController类。在这里,我介绍了四种不同类型的邮政服务。引入四种不同类型的POST方法的原因是为了向您提供一个使用泛型类型作为返回类型的示例。在第一个POST service方法RegisterStudent中,返回类型是用户定义类型StudentRegistrationReply。假设在插入过程中我们得到一个异常;我们如何通知调用者异常类型?因为返回类型是StudentRegistrationReply,我们必须返回类型为StudentRegistrationReply的对象。因此,我们需要一个泛型返回类型,这样我们就可以返回任何对象类型。但是,我们有办法处理这种情况。现在看看其他的方法;返回类型是泛型的,我们使用JSON以便我们可以翻转任何类型的对象。

现在,使用URL http://localhost:63662/api/studentregistration/InsertStudent调用使用InsertStudent (InsertStudent不是case san吧)的POST方法。注意,这里的返回类型是IActionResult,这是一个泛型类型。但是返回类型实现逻辑与第一个方法完全相同,它只是用来添加一条记录。还要注意[HttpPost("InsertStudent")],这有助于我们设计资源路径。现在您必须在资源路径的末尾添加InsertStudent方法。通过这种方式,我们可以设计一个不同的资源路径来在控制器中执行不同的方法。

现在我们要测试第三种方法,AddStudent。这三种方法都在执行相同的操作,即向学生列表中添加记录。但是它们有不同的返回类型和不同的资源路径。我的意图非常明确。首先,从方法返回对象的不同方法是什么?其次,我们如何设计不同的资源路径(路由)来调用特定的web方法?

现在使用URL http://localhost:63662/api/studentregistration/student调用AddStudent方法,其中返回类型是JsonResult。如果返回XML消息,我们不能将其作为返回类型使用,在这种情况下,我们必须将IActionResult作为通用返回类型使用。

现在重复GET测试,看看结果:

在上面的截图中,我们插入了错误的agem,我们将用PUT请求测试来更正它。

现在,我们将通过介绍PUT和DELETE服务来完成这个项目的最后一部分。

步骤8、现在,首先停止服务器,按照步骤4,分别添加两个控制器类StudentUpdateController和StudentDeleteController,分别用于PUT和DELETE服务,并修改这两个类,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using System.Text;
using StudentRegistrationDemo3.Models;
namespace StudentRegistrationDemo3.Controllers
{
 [Route("api/[controller]")]
 [ApiController]
 public class StudentUpdateController : Controller
 {
 // GET: api/<controller>
 [HttpPut]
 public JsonResult UpdateStudentRecord( Student stdn)
 {
 Console.WriteLine("In updateStudentRecord");
 return Json(StudentRegistration.getInstance().UpdateStudent(stdn));
 }
 }
}

And:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using StudentRegistrationDemo3.Models;
namespace StudentRegistrationDemo2.Controllers
{
 [Route("api/[controller]")]
 [ApiController]
 public class StudentDeleteController : Controller
 {
 [Route("student/remove/{regdNum}")]
 // DELETE: api/<controller>
 [HttpDelete]
 public IActionResult DeleteStudentRecord(String regdNum)
 {
 Console.WriteLine("In deleteStudentRecord");
 return Ok(StudentRegistration.getInstance().Remove(regdNum));
 }
 }
}

现在,保存项目并再次启动应用程序,插入三个记录,其中一个记录的年龄值错误,以便我们可以使用PUT服务来纠正它。

步骤9:插入三条记录后,使用下面的URL进行PUT请求测试。在这里,选择PUT方法。

http://localhost:63662/api/studentupdate

现在用GET调用验证更新的记录。

现在是测试我们的最后一个服务DELETE请求的时候了。使用下面的URL并从列表中删除一条记录。另外,我们还可以看看我们是如何在控制器类StudentDeleteController中设计资源路径的。

http://localhost63662/api/studentdelete/student/remove/12346

最后检查结果:

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

php编程基础教程.pptx|php编程培训,php,编程,基础,教程,pptx
php编程基础教程.pptx

历史上的今天:04月20日

ThinkPHP5快速入门基础

ThinkPHP5快速入门基础一、基础快速入门 ( 一 ) :基础本章介绍了 ThinkPHP5 .0 的安装及基本使用 ,并给出了一个最简单的示例带你了解如何开始开发 ,主要包 含 :简介官网下载 omposer安装和更新CGit下载和更新目录结构运行环境入口文件调试模式控制器视图读取数据总结在学习 ThinkPHP5.0 之前 ,如果你还不理解面向对象和命名空间的概念 ,建议首先去PHP手册恶

ThinkPHP5快速入门

ThinkPHP5快速入门目 录零、序言一、基础二、URL和路由三、请求和响应四、数据库五、查询语言六、模型和关联 (1)模型定义 (2)基础操作 (3)读取器和修改器 (4)类型转换和自动完成 (5)查询范围 (6)输入和验证 (7)关联 (8)模型输出七、视图和模板八、调试和日志九、API开发十、命令行工具十一、扩展十二、杂项SessionCookie验证

热门专题

综合高中|云南综合高中,昆明综合高中,综合高中能考本一吗,综合高中和普通高中的区别,综合高中是什么意思,综合高中能参加全国统一高考吗,综合高中可以考哪些大学,综合高中的学籍是什么
综合高中
昆明网站建设|昆明网站建设,昆明网站开发,昆明网站建设公司,昆明网站建设价格,昆明网站设计,昆明网站制作,网页设计,高端网站建设,高端网站设计
昆明网站建设
大理科技管理学校|大理科技管理学校,大理科技,大理科技中等职业技术学校,大理科技管理中等职业技术学校,大理科技学校
大理科技管理学校
天麻的功效与作用吃法|天麻的功效与作用,天麻的功效与作用吃法,天麻炖什么治头痛最好,天麻的功效与作用禁忌,天麻多少钱一斤,天麻的功效与作用吃法及禁忌,天麻怎么吃效果最好,天麻粉的功效与作用,天麻怎么吃
天麻的功效与作用吃法
金诺幼儿园(春城路金诺幼儿园)|昆明官渡区幼儿园,幼儿园报名,官渡区幼儿园,春城路幼儿园,幼儿园招生,学前班,昆明幼儿园,金诺幼儿园,环城南路幼儿园,石井路幼儿园
金诺幼儿园(春城路金诺幼儿园)
开放大学|开放大学报名,开放大学报考,开放大学,什么是开放大学,开放大学学历,开放大学学费,开放大学报名条件,开放大学报名时间,开放大学学历,开放大学专业
开放大学
外贸网站建设|外贸网站建设,英文网站制作,英文网站设计,美国主机空间,外贸建站平台,多语言网站制作
外贸网站建设
云南开放大学|云南开放大学报名,云南开放大学报考,云南开放大学,什么是云南开放大学,云南开放大学学历,云南开放大学学费,云南开放大学报名条件,云南开放大学报名时间,云南开放大学学历,云南开放大学专业
云南开放大学

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部