asp.net - 在 MVC ASP.NET Core 应用程序中正确放置 API 调用
问题描述
我正在寻找一些建议,任何反馈都会很棒。
我正在制作的应用程序的大纲是一个天气检查器。用户将邮政编码输入到视图中。然后,该邮政编码将用于从 API 获取经度和纬度,然后将结果输入另一个 API,该 API 将返回天气信息。
我将使用 HttpClient 类来实现这一点。
我是否正确地推断 API 调用应该在模型中而不是控制器中进行?
解决方案
我是否正确地推断 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);
}
}
}
推荐阅读
- c# - C# WPF 循环和删除选中的 ListView 项目
- java - 如何在其 Controller 类中使用 FXML 文件中的标签而不得到 NullPointerException?
- java - 按内部对象字段查询
- github - 本地 Jekyll 存储库克隆显示来自 Github 托管页面的不同输出
- node.js - 使用 SuperTest 的 Mocha 测试始终通过(即使错误)
- java - 旋转 HBox 中的每个 ImageView
- c# - 如何将命中点改为十字准线?
- c# - Automapper - 获取解析器中的所有条目
- git - 我在我的 CPanel 中找不到 Git 版本控制界面。非常需要它进行自动部署
- javascript - 如何使用 JavaScript/reactjs 检测 android 后点击?