如何使用 Ajax 调用在 API 中动态调用 ActionResult?

Posted

技术标签:

【中文标题】如何使用 Ajax 调用在 API 中动态调用 ActionResult?【英文标题】:How to dynamically call an ActionResult in your API by using an Ajax-call? 【发布时间】:2021-12-21 07:20:32 【问题描述】:

我在 StartUp.cs 中编写了以下用于调用我的 API 的代码。

            services.AddHttpClient("MyApi", c =>
            
#if DEBUG
                c.BaseAddress = new Uri("https://localhost:12345");
#else
                c.BaseAddress = new Uri("https://myApi.com");
#endif

但是当我想通过Ajax-call调用ActionResult时,他找不到API。

    alert(apiUrl);

    $.ajax(
        url: apiUrl + '/MyApiProcesses/GetSomething',
        type: 'POST',

所以我把这个变量写在了一个 js 文件中。

var apiUrl = 'https://localhost:12345';
//var apiUrl = 'https://myApi.com';

我想知道是否可以动态编写。如果在启动时声明,就不用声明两次了吗?

【问题讨论】:

【参考方案1】:

如果需要在ajax或者httpclient中使用url,我一般都是这样,但是从appsettings中获取字符串需要几个步骤。

    在 appsettings.json 中创建 AppUrl 部分
"AppUrl": 
    "DevUrl": "http//..",
    "ProductUrl": "http//..",
     .... another urls if needed
   
,

2.为本节创建类

 public class AppUrlSettings
  
        public string DevUrl get; set; 
        public string ProdUrl get; set; 

        ....another urls
   
    在启动时配置设置
var appUrlSection=Configuration.GetSection("AppUrl");

services.Configure<AppUrlSettings>(appUrlSection);

var urls = appUrlSection.Get<AppUrlSettings>();

services.AddHttpClient("MyApi", c =>
 
#if DEBUG
                c.BaseAddress = new Uri(urls.DevUrl);
#else
                c.BaseAddress = new Uri(urls.ProdUrl;
#endif
);
    现在您可以像这样使用它们了
public class MyController:Controller
    
        private readonly IOptions<AppUrlSettings> _appUrls;

        public MyController (IOptions<AppUrlSettings> appUrls)
        
            _appUrls = appUrls;
        

        public  IActionResult MyAction()
        
           var model= new Model
           
            DevUrl=_appUrls.Value.DevUrl;
               ...
           
        

然后您可以使用 url 作为隐藏字段。

或者你可以直接在javascript中从模型中获取url:

var devUrl = @html.Raw(Json.Encode(@Model.DevUrl));
.....

或者,如果您在很多地方都需要 url,创建一个可以直接注入到所需视图中的特殊服务是有意义的

【讨论】:

谢谢它工作正常。

以上是关于如何使用 Ajax 调用在 API 中动态调用 ActionResult?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Framework7在API中进行ajax调用

如何保护仅从前端使用的 API(Ajax 调用)

如何使用 javascript/jquery/AJAX 调用 Django REST API?

jquery tokenInput如何将ajax调用url动态更改为脚本

如何在前端的 Javascript Ajax API 调用中隐藏我的 JWT 令牌?

如何在 https 站点中调用 http api?