在MVC ASP.NET Core应用程序中正确放置API调用

时间:2019-03-05 13:42:09

标签: asp.net model-view-controller .net-core

我正在寻找一些建议,任何反馈都很好。

我正在制作的应用程序概述是天气检查器。用户将邮政编码输入到视图中。然后,该邮政编码将用于从API获取经度和纬度,然后将结果输入另一个API,该API将返回天气信息。

我将使用HttpClient类实现这一点。

我是否正确地说API调用应该在模型内而不是在控制器内进行?

1 个答案:

答案 0 :(得分:0)

  

我是否正确地说API调用应该在模型内而不是在控制器内进行?

您的推理是正确的。您不应在控制器中进行API调用-因为此逻辑与视图无关。

但是,正如其他评论所建议的那样,我会将呼叫放置在以下服务中:

public class ApiCallsService : IApiCallsService
{
    private readonly DbContext _context;

    public ApiCallsService(DbContext context) {
        _context = context;
    }

    public async Task<string> CallApi(string data)
    {
        //... call the API and return a string with the results
    }
}

您的界面将如下所示:

public interface IApiCallsService
{
    Task<string> CallApi(string data);
} 

然后您需要将服务添加到Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddTransient<IApiCallsService, ApiCallsService>();
}

然后,从您的控制器调用api:

namespace WeatherApp.Web.Controllers
{
    public class WeatherController : Controller
    {
        private readonly IApiCallsService _apiService;

        public WeatherController(IApiCallsService apiService)
        {
            _apiService = apiService;
        }

        public async Task<IActionResult> Index()
        {
            // Call the API
            string result = await _apiService.CallApi(data);
        }
    }
}