您的位置:首页 > 娱乐 > 明星 > 购物网站排名2018_邢台123招聘信息最新招聘信息网_中央常委成员名单_百度收录好的免费网站

购物网站排名2018_邢台123招聘信息最新招聘信息网_中央常委成员名单_百度收录好的免费网站

2024/10/7 2:22:46 来源:https://blog.csdn.net/m0_65664914/article/details/142299485  浏览:    关键词:购物网站排名2018_邢台123招聘信息最新招聘信息网_中央常委成员名单_百度收录好的免费网站
购物网站排名2018_邢台123招聘信息最新招聘信息网_中央常委成员名单_百度收录好的免费网站

第一步:创建ASP.NET Core 6项目

首先,创建一个新的ASP.NET Core 6 Web API项目:

dotnet new webapi -n RedisDemo
cd RedisDemo

第二步:安装必要的NuGet包

接下来,安装StackExchange.Redis和Microsoft.Extensions.Caching.StackExchangeRedis包:

dotnet add package StackExchange.Redis
dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis

第三步:配置Redis

appsettings.json文件中添加Redis的连接字符串:

{"ConnectionStrings": {"Redis": "localhost:6379"}
}

第四步:设置依赖注入

Program.cs文件中配置Redis缓存:

var builder = WebApplication.CreateBuilder(args);// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();// Configure Redis
builder.Services.AddStackExchangeRedisCache(options =>
{options.Configuration = builder.Configuration.GetConnectionString("Redis");
});var app = builder.Build();// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{app.UseSwagger();app.UseSwaggerUI();
}app.UseHttpsRedirection();app.UseAuthorization();app.MapControllers();app.Run();

第五步:创建泛型仓储接口和实现

创建一个新的文件夹Repositories,并在其中创建以下接口和类:

IRepository.cs
using System.Collections.Generic;
using System.Threading.Tasks;namespace RedisDemo.Repositories
{public interface IRepository<T>{Task<T> GetAsync(string id);Task<IEnumerable<T>> GetAllAsync();Task AddAsync(T entity);Task UpdateAsync(string id, T entity);Task DeleteAsync(string id);}
}
RedisRepository.cs
using Microsoft.Extensions.Caching.Distributed;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace RedisDemo.Repositories
{public class RedisRepository<T> : IRepository<T>{private readonly IDistributedCache _cache;private readonly string _entityName;public RedisRepository(IDistributedCache cache){_cache = cache;_entityName = typeof(T).Name.ToLower();}public async Task<T> GetAsync(string id){var data = await _cache.GetStringAsync($"{_entityName}:{id}");return data == null ? default : JsonConvert.DeserializeObject<T>(data);}public async Task<IEnumerable<T>> GetAllAsync(){// This is a simplified example. In a real-world scenario, you would need a more sophisticated way to manage keys.var keys = Enumerable.Range(1, 100).Select(i => $"{_entityName}:{i}").ToList();var result = new List<T>();foreach (var key in keys){var data = await _cache.GetStringAsync(key);if (data != null){result.Add(JsonConvert.DeserializeObject<T>(data));}}return result;}public async Task AddAsync(T entity){var id = Guid.NewGuid().ToString();var data = JsonConvert.SerializeObject(entity);await _cache.SetStringAsync($"{_entityName}:{id}", data);}public async Task UpdateAsync(string id, T entity){var data = JsonConvert.SerializeObject(entity);await _cache.SetStringAsync($"{_entityName}:{id}", data);}public async Task DeleteAsync(string id){await _cache.RemoveAsync($"{_entityName}:{id}");}}
}

第六步:创建实体类和控制器

创建一个新的文件夹Models,并在其中创建一个实体类:

Product.cs
namespace RedisDemo.Models
{public class Product{public string Id { get; set; }public string Name { get; set; }public decimal Price { get; set; }}
}

然后创建一个控制器来使用这个仓储:

ProductsController.cs
using Microsoft.AspNetCore.Mvc;
using RedisDemo.Models;
using RedisDemo.Repositories;
using System.Collections.Generic;
using System.Threading.Tasks;namespace RedisDemo.Controllers
{[Route("api/[controller]")][ApiController]public class ProductsController : ControllerBase{private readonly IRepository<Product> _repository;public ProductsController(IRepository<Product> repository){_repository = repository;}[HttpGet("{id}")]public async Task<ActionResult<Product>> GetProduct(string id){var product = await _repository.GetAsync(id);if (product == null){return NotFound();}return product;}[HttpGet]public async Task<ActionResult<IEnumerable<Product>>> GetProducts(){var products = await _repository.GetAllAsync();return Ok(products);}[HttpPost]public async Task<ActionResult> CreateProduct(Product product){await _repository.AddAsync(product);return CreatedAtAction(nameof(GetProduct), new { id = product.Id }, product);}[HttpPut("{id}")]public async Task<ActionResult> UpdateProduct(string id, Product product){await _repository.UpdateAsync(id, product);return NoContent();}[HttpDelete("{id}")]public async Task<ActionResult> DeleteProduct(string id){await _repository.DeleteAsync(id);return NoContent();}}
}

第七步:注册仓储服务

Program.cs文件中注册仓储服务:

builder.Services.AddScoped(typeof(IRepository<>), typeof(RedisRepository<>));

最后一步:运行项目

现在,你可以运行项目并测试API端点了:

dotnet run

你可以使用Postman或其他工具来测试API端点,例如:

  • GET /api/products
  • GET /api/products/{id}
  • POST /api/products
  • PUT /api/products/{id}
  • DELETE /api/products/{id}

总结

        这样就完成了在ASP.NET Core 6项目中整合使用Redis,并实现泛型接口和仓储模式的完整实例。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com