如何通过Ajax动态调用API的ActionResult,避免重复配置接口地址
动态统一配置API地址的实现方案
核心逻辑是让前端使用的API地址和服务端Startup.cs中配置的地址来自同一数据源,无需两处分别维护,具体实现步骤如下:
方案1:Razor页面/ MVC项目直接注入配置(最简便)
如果你是用Razor渲染前端页面,直接在公共布局页(如_Layout.cshtml)把服务端配置的API地址注入为前端全局变量即可:
- 首先在Razor视图引入
IHttpClientFactory服务:
@inject IHttpClientFactory HttpClientFactory
- 在页面
<head>标签内插入全局JS配置,直接读取你已经在Startup中注册的MyApi客户端的基地址:
<script type="text/javascript"> window.myApiConfig = { baseUrl: '@HttpClientFactory.CreateClient("MyApi").BaseAddress.ToString().TrimEnd('/')' } </script>
- 前端JS中直接调用全局变量即可,删除原来手动定义的
apiUrl变量:
$.ajax({ url: window.myApiConfig.baseUrl + '/MyApiProcesses/GetSomething', type: 'POST', // 其余业务配置 })
方案2:抽离配置源实现更灵活的管理(推荐)
把硬编码在条件编译中的地址抽离到配置文件,后续修改地址不需要改Startup.cs代码,也方便统一管理多环境配置:
- 在项目对应的配置文件中新增API地址配置:
- 开发环境配置文件
appsettings.Development.json:
{ "ApiSettings": { "MyApiBaseUrl": "https://localhost:12345" } }- 生产环境配置文件
appsettings.Production.json:
{ "ApiSettings": { "MyApiBaseUrl": "https://myApi.com" } } - 开发环境配置文件
- 修改
Startup.cs中的HttpClient注册逻辑,改为读取配置文件内容:
services.AddHttpClient("MyApi", c => { var baseUrl = Configuration.GetValue<string>("ApiSettings:MyApiBaseUrl"); c.BaseAddress = new Uri(baseUrl); });
- 后续不管是服务端调用API,还是注入到前端的地址,都从同一个配置源读取,完全避免两处配置不一致的问题。
注意:注入前端的地址做了TrimEnd('/')处理,避免基地址末尾的斜杠和接口路径开头的斜杠拼接出现双斜杠的异常。
内容的提问来源于stack exchange,提问作者user1531040
相关产品推荐
相关产品推荐

