【问题标题】:How can I implement getting Web API data in an ASP.NET MVC app using the repository architecture?如何使用存储库架构在 ASP.NET MVC 应用程序中获取 Web API 数据?
【发布时间】:2021-10-26 03:40:00
【问题描述】:

我有以下代码可以从 ASP.NET Web API 检索数据:

string BaseUrl = "https://localhost:48262/";

public async Task<ActionResult> Index()
{
    List<User> users= new List<User>();

    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri(BaseUrl);
        client.DefaultRequestHeaders.Clear();

        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage res = await client.GetAsync("api/Users");

        if (res.IsSuccessStatusCode)
        {
            var userdiagnosisRes = res.Content.ReadAsStringAsync().Result;
            users = JsonConvert.DeserializeObject<List<User>>(userRes);
        }

        return View(users);
    }
}

此代码有效,它位于控制器中,数据显示在Index 页面上。

如何实现这是一个存储库架构?我的应用程序还具有与另一个数据库的DbContext 连接,但对于此连接,我必须从 RESTapi 检索数据。我希望能够在除此控制器之外的其他地方使用 webapi 数据。

【问题讨论】:

    标签: c# asp.net-mvc rest asp.net-web-api repository


    【解决方案1】:

    我利用了代表和表达式:

    public async Task<HttpResponseMessage> GetAsync(string url, Action<HttpRequestHeaders> headers, Action<IHttpRequestParameters> parameters)
        {
            using (var client = new HttpClient())
            {
                headers?.Invoke(client.DefaultRequestHeaders);
    
                if (parameters != null)
                {
                    parameters.Invoke(_httpRequestParameters);
                    var query = _httpRequestParameters.GetQueryString();
                    url += query;
                }
    
                return await client.GetAsync(url);
            }
        }
    

    然后这样称呼它:

    var test = await _handler.GetAsync("https://myurl.com", header =>
            {
                header.Add("mynewheader", "ha! it works!!");
                header.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/xml"));
                header.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "fefe5648564grgrgr65446");
            }, parameters =>
            {
                parameters.Add("test", "firstparam");
                parameters.Add("test2", "secondparam");
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-27
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多