我已经搜索了很多,但是没有找到任何使用存储库模式在ASP.NET MVC应用程序中使用外部REST Web服务的好例子,它们具有松散耦合和有意义的关注点分离。我在网上找到的几乎所有存储库模式的例子都是编写SQL数据或使用ORM。我只想看一些使用HttpClient检索数据但包装在存储库中的例子。
是否有任何好的例子?或者有人可以写一个简单的例子吗?
答案 0 :(得分:8)
一个简单的例子:
// You need interface to keep your repository usage abstracted
// from concrete implementation as this is the whole point of
// repository pattern.
public interface IUserRepository
{
Task<User> GetUserAsync(int userId);
}
public class UserRepository : IUserRepository
{
private static string baseUrl = "https://example.com/api/"
public async Task<User> GetUserAsync(int userId)
{
var userJson = await GetStringAsync(baseUrl + "users/" + userId);
// Here I use Newtonsoft.Json to deserialize JSON string to User object
var user = JsonConvert.DeserializeObject<User>(userJson);
return user;
}
private static async Task<string> GetStringAsync(string url)
{
using (var httpClient = new HttpClient())
{
return await httpClient.GetStringAsync(url);
}
}
}
Here是获取Newtonsoft.Json
包裹的地点/方式。
另一个选择是重用HttpClient
对象并创建存储库IDisposable
,因为在使用它时需要处理HttpClient
。在我的第一个示例中,它发生在HttpClient
语句末尾的using
使用之后。