c# - 通过 HttpClient 使用外部 REST Web 服务的存储库模式示例?

标签 c# asp.net-mvc web-services httpclient repository-pattern

我搜索了很多,但没有找到任何使用存储库模式在 ASP.NET MVC 应用程序中使用松散耦合和有意义的关注点分离的外部 REST Web 服务的好例子。我在网上找到的几乎所有存储库模式示例都是编写 SQL 数据或使用 ORM。我只想看一些使用 HttpClient 检索数据但包装在存储库中的示例。

谁能写一个简单的例子?

最佳答案

一个简单的例子:

// 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 Task<string> GetStringAsync(string url)
    {
        using (var httpClient = new HttpClient())
        {
            return httpClient.GetStringAsync(url);
        }
    }
}

Here在哪里/如何获取 Newtonsoft.Json 包。


另一种选择是重用 HttpClient 对象并使您的存储库成为 IDisposable,因为您需要在使用完 HttpClient 后释放它。在我的第一个示例中,它发生在 using 语句末尾的 HttpClient 使用之后。

关于c# - 通过 HttpClient 使用外部 REST Web 服务的存储库模式示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38379360/

相关文章:

java - 如何在本地主机上启动 cxf 服务但在 wsdl 中返回外部地址?

c# - 如何监控重要的工作线程

c# - Linq如何使用OR?

c# - 缓存 IEnumerable

javascript - 使用jquery禁用按钮停止向chrome中的服务器发送输入--MVC

asp.net-mvc - DropDownListFor 枚举不会绑定(bind)回模型

asp.net-mvc - 是否可以在 JsonResult 上使用 [HttpPost] 属性

c# - 带有包含图像的 HTML 正文的日历邀请

android - 如何检测另一个应用程序何时使用我的网络服务?

c# - 如何使用 Web 服务正确抛出和处理异常