簡體   English   中英

如何使用存儲庫架構在 ASP.NET MVC 應用程序中實現獲取 Web API 數據?

[英]How can I implement getting Web API data in an ASP.NET MVC app using the repository architecture?

我有以下代碼可以從 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 數據,而不僅僅是這個控制器。

我利用委托和表達式:

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");
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM