首页 > 解决方案 > 在 MVC ASP.NET Core 应用程序中正确放置 API 调用

问题描述

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

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

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

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

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

解决方案


我是否正确地推断 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);
        }
    }
}

推荐阅读