Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从多个控制器合并HttpGet方法_C#_Asp.net Core_Asp.net Web Api - Fatal编程技术网

C# 从多个控制器合并HttpGet方法

C# 从多个控制器合并HttpGet方法,c#,asp.net-core,asp.net-web-api,C#,Asp.net Core,Asp.net Web Api,我正在开发一个ASP.NET核心网站,它向ASP.NET Web API发出请求。在打开视图之前,我的网站控制器中有一些地方正在执行多个填充下拉列表和列表的请求: // Populate countryies, states and cities, to populate dropdown lists var countries = await client.GetAsync("countries"); if (countries.IsSuccessStatusCode) { viewM

我正在开发一个ASP.NET核心网站,它向ASP.NET Web API发出请求。在打开视图之前,我的网站控制器中有一些地方正在执行多个填充下拉列表和列表的请求:

// Populate countryies, states and cities, to populate dropdown lists
var countries = await client.GetAsync("countries");
if (countries.IsSuccessStatusCode)
{
    viewModel.Countries = await countries.Content.ReadAsAsync<List<Country>>();
}

var states = await client.GetAsync("states");
if (states.IsSuccessStatusCode)
{
    viewModel.States = await states.Content.ReadAsAsync<List<State>>();
}

var cities = await client.GetAsync("cities");
if (cities.IsSuccessStatusCode)
{
    viewModel.Cities = await cities.Content.ReadAsAsync<List<City>>();
}

var residues = await client.GetAsync("residues");
if (residues.IsSuccessStatusCode)
{
    viewModel.Residues = await residues.Content.ReadAsAsync<List<SiteResidue>>();
}

return View(viewModel);
//填充国家、州和城市,以填充下拉列表
var countries=await client.GetAsync(“国家”);
if(国家/地区。IsSuccessStatusCode)
{
viewModel.Countries=等待Countries.Content.ReadAsAsync();
}
var states=await client.GetAsync(“states”);
if(状态。IsSuccessStatusCode)
{
viewModel.States=等待States.Content.ReadAsAsync();
}
var cities=await client.GetAsync(“cities”);
if(城市。IsSuccessStatusCode)
{
viewModel.Cities=等待Cities.Content.ReadAsAsync();
}
var results=await client.GetAsync(“results”);
if(剩余物。IsSuccessStatusCode)
{
viewModel.resids=wait resids.Content.ReadAsAsync();
}
返回视图(viewModel);
我必须分别发出这些请求,因为在我的API中,每个表都有控制器(CountriesController、StatesController、CitiesController…),这些表的
HttpGet
方法在各个控制器中声明。这在结构上似乎是正确的,但它会发出不理想的请求,因为我可以只发出一个请求来同时接收所有数据并减少加载时间


我应该如何构造我的API控制器,这样我就可以在一次中打开所有这些请求?我应该创建一个“CountriesStatescitiesController”,即使没有具有该名称的表吗?

因为它们都是异步调用,所以您可以同时进行调用,并等待所有调用完成:

var countriesTask = client.GetAsync("countries");
var statesTask = client.GetAsync("states");
var citiesTask = client.GetAsync("cities");
var residuesTask = client.GetAsync("residues");

await Task.WhenAll(countriesTask, statesTask, citiesTask, residuesTask);

viewModel.Countries = countriesTask.Result.Content.ReadAsAsync<List<Country>>();
viewModel.States = statesTask.Result.Content.ReadAsAsync<List<State>>();
viewModel.Cities = citiesTask.Result.Content.ReadAsAsync<List<City>>();
viewModel.Residues = residuesTask.Result.Content.ReadAsAsync<List<SiteResidue>>();

return View(viewModel);
var countriesTask=client.GetAsync(“国家”);
var statesTask=client.GetAsync(“states”);
var citiesTask=client.GetAsync(“城市”);
var residuesTask=client.GetAsync(“剩余”);
等待任务。当所有(国家任务、州任务、城市任务、剩余任务);
viewModel.Countries=countriesTask.Result.Content.ReadAsAsync();
viewModel.States=statesTask.Result.Content.ReadAsAsync();
viewModel.Cities=citiesTask.Result.Content.ReadAsAsync();
viewModel.resids=residuesTask.Result.Content.ReadAsAsync();
返回视图(viewModel);

由于它们都是异步调用,您可以同时进行调用并等待所有调用完成:

var countriesTask = client.GetAsync("countries");
var statesTask = client.GetAsync("states");
var citiesTask = client.GetAsync("cities");
var residuesTask = client.GetAsync("residues");

await Task.WhenAll(countriesTask, statesTask, citiesTask, residuesTask);

viewModel.Countries = countriesTask.Result.Content.ReadAsAsync<List<Country>>();
viewModel.States = statesTask.Result.Content.ReadAsAsync<List<State>>();
viewModel.Cities = citiesTask.Result.Content.ReadAsAsync<List<City>>();
viewModel.Residues = residuesTask.Result.Content.ReadAsAsync<List<SiteResidue>>();

return View(viewModel);
var countriesTask=client.GetAsync(“国家”);
var statesTask=client.GetAsync(“states”);
var citiesTask=client.GetAsync(“城市”);
var residuesTask=client.GetAsync(“剩余”);
等待任务。当所有(国家任务、州任务、城市任务、剩余任务);
viewModel.Countries=countriesTask.Result.Content.ReadAsAsync();
viewModel.States=statesTask.Result.Content.ReadAsAsync();
viewModel.Cities=citiesTask.Result.Content.ReadAsAsync();
viewModel.resids=residuesTask.Result.Content.ReadAsAsync();
返回视图(viewModel);

这是一个更好的实现,但它并不能解决我提出多个请求的问题。您可以实现一个Web API端点,它返回一个对象中的所有下拉列表,但它看起来相当单一,根本不是RESTful。不要走乡村、州、市的路线——如果你也需要街道怎么办?不是每个表都必须有一个控制器,而是每个逻辑实体都有一个控制器比从一个端点返回所有内容更好。如果您担心性能,那么将结果缓存到web层。我明白了。一般来说,我是ASP.NET新手,所以除了提高性能之外,我还试图学习如何以正确的方式制作东西。谢谢你的澄清!这是一个更好的实现,但它并不能解决我提出多个请求的问题。您可以实现一个Web API端点,它返回一个对象中的所有下拉列表,但它看起来相当单一,而不是RESTful。不要走乡村、州、市的路线——如果你也需要街道怎么办?不是每个表都必须有一个控制器,而是每个逻辑实体都有一个控制器比从一个端点返回所有内容更好。如果您担心性能,那么将结果缓存到web层。我明白了。一般来说,我是ASP.NET新手,所以除了提高性能之外,我还试图学习如何以正确的方式制作东西。谢谢你的澄清!