Создание веб-сервиса

Последнее обновление: 14.01.2021

В прошлой теме мы рассмотрели, как отправлять запрос к внешнему серверу. Теперь рассмотрим, как мы можем отправлять запросы самых различных типов - GET, POST, PUT, DELETE. Для тестирования взаимодействия с сервером приложения на Xamarin создадим веб-сервис (либо можно взять уже имеющийся сервер вне зависимсти от технологии бекэнда). В качестве основы для веб-сервиса выберем технологию ASP.NET Core. Для этого создадим новый проект по типу ASP.NET Core Web Application

Веб-сервис для Xamarin Forms

Назовем SocialService:

Xamarin и ASP NET Core

Далее в открывшемся окне в качеcтве шаблона проекта выберем ASP.NET Core Empty.

ASP.NET Core Web api для Xamarin Forms

После создания проекта добавим в него через Nuget пакет Microsoft.EntityFrameworkCore.SqlServer

Добавление Entity Framework в ASP.NET Web api

Затем добавим в проект новую папку Models. А в папку Models - новый класс, который будет представлять модель используемых данных - класс Friend:

using System.ComponentModel.DataAnnotations;

namespace SocialService.Models
{
    public class Friend
    {
        public int Id { get; set; }
        [Required]
        public string Name { get; set; }
        public string Email { get; set; }
        public string Phone { get; set; }
    }
}

Затем добавим в папку Models класс ApplicationContext - класс контекста данных, через который будем подключаться к базе данных:

using Microsoft.EntityFrameworkCore;

namespace SocialService.Models
{
    public class ApplicationContext : DbContext
    {
        public DbSet<Friend> Friends { get; set; }
        public ApplicationContext(DbContextOptions<ApplicationContext> options)
            : base(options)
        {
            Database.EnsureCreated();
        }
    }
}

Далее добавим в проект новую папку, которую назовем Controllers. Затем в эту папку добавим новый элемент по типу API Controller - Empty, который назовем FriendsController:

Добавление контроллера в проект ASP.NET Web API

Изменим код этого контроллера на следующий:

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using SocialService.Models;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace SocialService.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class FriendsController : ControllerBase
    {
        ApplicationContext db;
        public FriendsController(ApplicationContext context)
        {
            db = context;
        }

        [HttpGet]
        public async Task<ActionResult<IEnumerable<Friend>>> Get()
        {
            return await db.Friends.ToListAsync();
        }

        // GET api/Friends/5
        [HttpGet("{id}")]
        public async Task<ActionResult<Friend>> Get(int id)
        {
            Friend Friend = await db.Friends.FirstOrDefaultAsync(x => x.Id == id);
            if (Friend == null)
                return NotFound();
            return new ObjectResult(Friend);
        }

        // POST api/Friends
        [HttpPost]
        public async Task<ActionResult<Friend>> Post(Friend Friend)
        {
            if (Friend == null)
            {
                return BadRequest();
            }

            db.Friends.Add(Friend);
            await db.SaveChangesAsync();
            return Ok(Friend);
        }

        // PUT api/Friends/
        [HttpPut]
        public async Task<ActionResult<Friend>> Put(Friend Friend)
        {
            if (Friend == null)
            {
                return BadRequest();
            }
            if (!db.Friends.Any(x => x.Id == Friend.Id))
            {
                return NotFound();
            }

            db.Update(Friend);
            await db.SaveChangesAsync();
            return Ok(Friend);
        }

        // DELETE api/Friends/5
        [HttpDelete("{id}")]
        public async Task<ActionResult<Friend>> Delete(int id)
        {
            Friend Friend = db.Friends.FirstOrDefault(x => x.Id == id);
            if (Friend == null)
            {
                return NotFound();
            }
            db.Friends.Remove(Friend);
            await db.SaveChangesAsync();
            return Ok(Friend);
        }
    }
}

В итоге получится следующий проект:

Проект ASP.NET Web API для Xamarin

И изменим класс Startup, который имеется в проекте по умолчанию, следующим образом:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using SocialService.Models;

namespace SocialService
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            string con = "Server=(localdb)\\mssqllocaldb;Database=friendsdb1;Trusted_Connection=True;";
            // устанавливаем контекст данных
            services.AddDbContext<ApplicationContext>(options => options.UseSqlServer(con));

            services.AddControllers(); // используем контроллеры без представлений
        }

        public void Configure(IApplicationBuilder app)
        {
            app.UseDeveloperExceptionPage();

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers(); // подключаем маршрутизацию на контроллеры
            });
        }
    }
}

Это типовой веб-сервис, реализующий стандартный CRUD-интерфейс, достаточный для демонстрации сетевых возможностей приложения на Xamarin. Но естественно конкретные сервисы, с которыми придется взаимодействовать, могут отличаться по функционалу.

После того, как сервис готов, его можно запустить с помощю одного из способов, описанных на странице http://metanit.com/sharp/mvc5/24.3.php.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850