我有以下代码,可以从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");
});