【问题标题】:Can I link to a service without hard coding in URL/Port我可以链接到服务而不在 URL/端口中进行硬编码吗
【发布时间】:2015-07-29 21:28:41
【问题描述】:

问题:我可以通过 Web 客户端访问我的服务控制器,而无需将 URL/端口硬编码到服务。

信息:

  • 在 localhost 端口上运行的 web api 服务
  • 在 localhost 上运行的 Web 客户端(mvc、razor),不同的端口
  • CORS 已启用
  • 代码有效,但我不想要硬编码的网址

从客户端到服务的示例 AJAX 调用:

$.ajax({
        url: "http://localhost:12345/api/ModifySystems",
        type: "post",
        xhrFields: {
            withCredentials: true
        },
        datatype: "json",
        data: ko.toJSON({ systems: self.updatedSystem, id: self.id }),
        contentType: "application/json",
        success: function (result) { 
           // do stuff
        },
        error: function (request, status, error) {   
           // do stuff
        }
    });

如你所见,这个 AJAX 调用使用的是 url:

http://localhost:12345/api/ModifySystems

有没有办法将其更改为能够动态确定“http://localhost:12345”?有没有办法方便,类似于“@Url.Action("ModifySystems")”?

【问题讨论】:

    标签: c# ajax asp.net-mvc asp.net-web-api


    【解决方案1】:

    您可以将服务的根 URL 存储在配置文件中,然后将其添加到视图的 Model 对象并输出如下:

    $.ajax({
        url: "@Model.RootServiceUrl" + "/api/ModifySystems",
        type: "post",
        ....
    

    【讨论】:

    • 我肯定会开始这样做,因为它看起来很干净并且更容易更改,但这仍然是静态解决方案而不是动态解决方案。我仍然需要对 url/port 进行硬编码,但我会在不同的地方进行。不过感谢您提供的信息 - 我喜欢 js 的“静态变量”更改。
    • 您总是需要定义 API url somewhere,因为它们是两个独立的应用程序。例如,它们可以部署在不同的服务器上,或者端口或域名可以更改 - mvc 应用程序无法自动知道 api 应用程序的 url 是什么。放到config里面,就是不管调用多少次,都只需要在一个地方(以及合适的地方……配置文件中的配置)改。
    • garrett,我看不出它比将服务地址的已知值放在 Web 应用程序的域中的某个位置更动态。假设您不知道服务在哪里,而您的目标是找出服务正在侦听的位置……我能想出的解决方案充其量是杂乱无章的。配置文件是指运行时的变化,所以并不真正认为是硬编码的,不需要重新编译代码就可以使对配置的更改生效。
    猜你喜欢
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2020-06-09
    相关资源
    最近更新 更多