Вступление
В настоящее время одной из самых популярных распределенных архитектур в цифровом мире является веб-сервис RESTful, который широко используется в этом секторе. Поскольку ASP.NET является одной из самых популярных и широко используемых технологий в финансовом и цифровом секторах Великобритании, я решил написать эту статью для тех, кто интересуется распределенными технологиями. Вы можете скачать проект здесь .
Я собираюсь, шаг за шагом, объяснить, как разработать веб-сервис RESTful в ASP .NET с веб-API.
Сначала загрузите новейшую визуальную студию в свою систему. Это бесплатно для учебных целей.
Также загрузите SOAPUI для тестирования нашего приложения здесь .
Я написал еще одну статью в .net Core, вам это тоже может понравиться.
Давайте начнем наш проект:
Шаг 1
Сначала создайте проект веб-приложения ASP.NET в Visual Studio и назовите его StudentRegistrationDemo2 . Для этого выберите Файл-> Создать-> Проект-> Веб-приложение ASP.NET (см. Окно ниже) и нажмите ОК.
Как только вы нажмете кнопку OK, вы увидите окно ниже, где вам нужно выбрать Web API и нажать кнопку OK.
После того, как вы нажмете кнопку ОК, он создаст следующую структуру проекта:
Шаг 2
Теперь мы создадим следующие классы ресурсов для обработки наших сервисов GET, POST, PUT и DELETE . Щелкните правой кнопкой мыши папку « Models » в окне проводника проекта и выберите « Add => Class» (см. Ниже).
Измените Class Student.cs как показано ниже:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace StudentRegistrationDemo2.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; }
}
}
}
Шаг 3
Выполните шаг 2 выше, чтобы создать и добавить ниже два класса в папке Models :
Первый — StudentRegistration , это одноэлементный класс, который будет содержать список зарегистрированных студентов, включая все операции для запросов GET, POST, PUT и DELETE .
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace StudentRegistrationDemo2.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";
}
}
}
Второй класс — StudentRegistrationReply , этот класс будет использоваться для ответа на сообщение клиентскому приложению в качестве ответа.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace StudentRegistrationDemo2.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 . В этом примере мы создадим отдельные контроллеры для запросов GET, POST, PUT и DELETE, даже если в этом нет необходимости, но для большей ясности я использую отдельные контроллеры. Для всех вышеперечисленных сервисов подойдет даже один контроллер, но в соответствии с хорошим принципом разработки у нас должен быть отдельный контроллер, чтобы приложение было легко обслуживать и отлаживать.
Давайте начнем с запроса GET и POST . Щелкните правой кнопкой мыши папку Controllers и выберите Add => Controller. В приведенном ниже окне выберите Контроллер Web API 2 — Пусто.
Назовите первый контроллер как StudentRetriveController и нажмите кнопку Добавить (см. Ниже).
Теперь измените StudentRetriveController, как показано ниже:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using StudentRegistrationDemo2.Models;
namespace StudentRegistrationDemo2.Controllers
{
//GET api/studentretrive
public class StudentRetriveController : ApiController
{
public List<Student> GetAllStudents()
{
return StudentRegistration.getInstance().getAllStudent();
}
}
}
Если вы посмотрите на код, это так просто. Нам не нужно исключительно упоминать, является ли это методом запроса GET или нет. Это даже не требует упоминания пути ресурса. Веб-API автоматически считает его запросом GET, поскольку имя метода начинается с ключевого слова «Get» (GetAllStudent), а в пути к ресурсу добавляется «api» в начале и имя контроллера (все строчными буквами) в оно вернулось. Таким образом, любой вызов GET с путем к ресурсу » / api / studentretrive » вызовет описанный выше метод » GetAllStudents «. Но если вы реализуете более одного метода GET, вы должны четко указать путь к ресурсу.
Шаг 5
Настало время представить контроллер для обработки запроса POST . Просто выполните шаг 4 и создайте StudentRegistrationController и измените его, как показано ниже:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using StudentRegistrationDemo2.Models;
namespace StudentRegistrationDemo2.Controllers
{
public class StudentRegistrationController : ApiController
{
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;
}
}
}
Теперь мы закончили наш первый этап, и пришло время протестировать приложение.
Шаг 6
В строке меню вы можете увидеть зеленую кнопку со стрелкой и выбрать браузер, установленный в вашей системе, и щелкнуть по нему. Он запустит ваш веб-сервер и запустит приложение веб-службы.
Подождите, пока вы не увидите браузер, как показано ниже:
Теперь сервер работает, и мы сделаем наш первый вызов веб-службы, т.е. сначала вызов GET .
Шаг 7
Я надеюсь, что вы уже установили SOAPUI в вашей системе. Если нет, загрузите SOAPUI отсюда . Теперь откройте приложение и в меню «Файл» выберите «Новый проект REST» (« Файл»> «Новый проект REST» ), скопируйте и вставьте приведенный ниже URL-адрес и измените номер порта 63053, если он отличается в вашей системе. Затем нажмите кнопку ОК.
http: // localhost: 63053 / api / studentretrive (обратите внимание на URL. Мы используем имя контроллера studentretrive (StudentRetriveController) в качестве локатора ресурсов)
Как только проект создан, просто нажмите зеленую кнопку со стрелкой, и вы увидите пустую запись, как показано ниже:
Причина очевидна, так как наш список учеников пуст. Мы должны вставить несколько записей здесь. Для добавления записей мы будем использовать наш POST сервис. Давайте проверим наш сервис POST сейчас.
Шаг 8
Просто выполните шаг 7, создайте новый проект REST и добавьте следующий URL:
HTTP: // локальный: 63053 / API / studentregistration
Но здесь нам нужно сделать некоторые дополнительные настройки. Сначала выберите POST из списка методов и добавьте запись в Media Type для вставки в приложение. Теперь нажмите зеленую кнопку со стрелкой:
Теперь повторите шаг 7 и посмотрите:
Теперь повторите шаг 8, вставьте еще несколько записей и повторите шаг 7, чтобы проверить результат.
Все идет нормально. Теперь мы собираемся завершить нашу последнюю часть этого проекта, добавив сервисы PUT и DELETE .
Шаг 9
Выполните шаг 4 и добавьте два контроллера соответственно: StudentUpdateController и StudentDeleteController. M odify как , как показано ниже:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using StudentRegistrationDemo2.Models;
namespace StudentRegistrationDemo2.Controllers
{
public class StudentUpdateController : ApiController
{
public String PutStudentRecord( Student stdn)
{
Console.WriteLine("In updateStudentRecord");
return StudentRegistration.getInstance().UpdateStudent(stdn);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using StudentRegistrationDemo2.Models;
namespace StudentRegistrationDemo2.Controllers
{
public class StudentDeleteController : ApiController
{
[Route("student/remove/{regdNum}")]
public String DeleteStudentRecord(String regdNum)
{
Console.WriteLine("In deleteStudentRecord");
return StudentRegistration.getInstance().Remove(regdNum);
}
}
}
Теперь посмотрим на приведенный выше класс контроллера. Какие различия вы заметили? Маршрут : здесь мы используем Маршрут, чтобы особо указать местоположение ресурса. У вас может возникнуть вопрос о том, нужно ли нам добавлять несколько служб POST или GET и как различать каждый метод. Не беспокойтесь, мы можем сделать это, как показано ниже:
Сначала с другой подписью метода
С другой подписью метода:
GetAllStudents(){}//default
GetStudent(Student object){}
GetStudentRec(String registrationNumber){}
и с помощью Route
[Route("student/remove/{regdNum}")]
DeleteStudent(String regdNum){}
[Route("student/removeall")]
DeleteAllStudent(){}
Теперь давайте протестируем все сервисы, которые мы реализовали до сих пор.
Шаг 10
Теперь используйте сервис POST и добавьте три записи. В одной из записей укажите age = 270, что, конечно, неверно. При вызове GET сначала проверьте записи. Теперь мы собираемся исправить вышеуказанное значение с помощью нашего теста запроса PUT. Создайте новый проект REST и добавьте следующий URL. На этот раз выберите метод PUT, добавьте запись, которую нужно изменить, и нажмите кнопку с зеленой стрелкой.
HTTP: // локальный: 63053 / API / studentupdate
Теперь проверьте записи:
Мы достигли конца нашего проекта. Теперь давайте проверим запрос DELETE. Создайте новый проект и добавьте приведенный ниже URL, а на этот раз выберите тип метода DELETE.
HTTP: // локальный: 63053 / студент / удалить / 12346
Теперь просто повторите запрос GET и проверьте результат.
Надеюсь, вам понравилась эта статья. Дайте мне знать любые вопросы, которые могут у вас возникнуть в разделе комментариев. Благодаря!
Если вам понравилась эта статья и вы хотите больше узнать о ASP.NET, ознакомьтесь с этой коллекцией учебников и статей по всем вопросам ASP.NET.