javascript - 从 jquery 调用 Mirth 'client api' 服务

标签 javascript jquery mirth

我有一个 .Net 网站,托管在 Intranet Web 服务器上。在 .Net 站点上,我对我们的 mirth 机器进行了基本的 jquery ajax 调用。我正在尝试访问随 mirth 基本安装提供的客户端 api。
我们正在运行 mirth 3.9.1,具有默认的 mirth.properties 页面,因此 CORS 设置应该是正确的。
我已经尝试了 mirth.properties 中的各种设置(并在更改之间重新启动了 mcservice)和各种 $.ajax 设置,但似乎找不到正确的组合。
根据这个答案:( https://stackoverflow.com/a/47096927/505829 ),我应该能够使用基本身份验证,但即使我必须打两个电话,我也可以,我只需要一些有用的东西。虽然最好打一个电话。
这是ajax调用

                $.ajax
                ({
                    type: "GET",
                    url: "https://ngmaintst01:8443/api/channels",
                    dataType: 'json',
                   // username: username,
                   // password: password,
                   // crossDomain: true,
                    beforeSend: function (xhr) {
                        xhr.setRequestHeader('Authorization', 'Basic ' + btoa(username + ":" + password));
                    },
                    xhrFields: {
                        withCredentials: true
                    },
                   // headers: {
                   //   "Authorization": "Basic " + btoa(username + ":" + password)
                   // },
                    success: function () {
                        alert('success');
                    }
                });
这是欢乐属性:
# CORS headers
server.api.accesscontrolalloworigin = *
server.api.accesscontrolallowcredentials = false
server.api.accesscontrolallowmethods = GET, POST, DELETE, PUT
server.api.accesscontrolallowheaders = Content-Type
server.api.accesscontrolexposeheaders =
server.api.accesscontrolmaxage =
如果我在 chromes 开发控制台中采用上面所示的单一调用方法,我会得到:
(failed)net::ERR_FAILED 
如果我采用两次调用方法(如下),第一个调用成功(代码 200),第二个调用与单调用方法'(failed)net::ERR_FAILED' 相同,这次出现第二个调用不带 cookie session 数据,这就是为什么单调用方法可能是理想的。
$.ajax({
                    type: 'POST',
                    url: 'https://' + APPLIANCE+':8443/api/users/_login',
                    contentType: 'application/x-www-form-urlencoded',
                    dataType: 'xml',
                    data: { username: username, password: password },
                    success: function (data, textStatus, jqXHR) {

                        //alert(textStatus);
                        $.ajax({
                            type: 'GET',
                            url: 'https://' + APPLIANCE + ':8443/api/channels/' + channelid + '/statistics',
                            dataType: 'xml',
                            crossDomain: true,
                            xhrFields: { withCredentials: true },
                            //data: data,
                            //success: function(data, textStatus, jqXHR){ alert(textStatus); },
                            //error: function(jqXHR, textStatus, errorThrown){ alert(textStatus);}
                        });
                    },
                    error: function (jqXHR, textStatus, errorThrown) { alert(textStatus); }

                });

最佳答案

在 slack 上的欢乐人士的帮助下,我能够完成这项工作。有一个“问题”,据我所知,它只支持一个 Web 服务器。所以我要么需要在这台服务器上同时拥有我的测试和生产站点,要么不需要测试。
或者,我将仅使用代理后端服务来完全绕过 cors。所以我的本地 js 将调用我的本地代理服务器,并将请求转发到 mirths api。
尽管如此,对于后代,这里是如何让 cors 工作。
(实现 mirth 的一个可能功能是动态 accesscontrolalloworigin,您可以在其中提供域的“访问列表”,只要请求来自这些域之一,它就会动态地吐出该服务器名称。这将使我能够有多个服务器调用这些 api。ala Access-Control-Allow-Origin Multiple Origin Domains? )

# CORS headers
server.api.accesscontrolalloworigin = https://MyDomainServer
server.api.accesscontrolallowcredentials = true
server.api.accesscontrolallowmethods = GET,HEAD,OPTIONS,POST,PUT
server.api.accesscontrolallowheaders = Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization 
server.api.accesscontrolexposeheaders =
server.api.accesscontrolmaxage =
$.ajax
({
    type: "GET",
    url: "https://MirthAppliance:8443/api/channels",
    dataType: 'json',
    xhrFields: {
       withCredentials: true
    },
    headers: {
        "Authorization": "Basic " + btoa(username + ":" + password)
    },
    success: function () {
        //alert('success');
    },
    error: function (xhr, status, error) {
        var errorMessage = xhr.status + ': ' + xhr.statusText
       // alert('Error - ' + errorMessage);
    }
});

关于javascript - 从 jquery 调用 Mirth 'client api' 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64051966/

相关文章:

javascript - 将页面数据保存到本地存储中

postgresql - TRUNCATE 145GB 表后,Postgres 没有释放空间给操作系统

javascript - 如何在脚本中获取 Mirth Connect 环境名称?

javascript - IndexedDb 的延迟 then of then 是未定义的

javascript - 带有验证控件的 ASP.NET 和 jQuery 出现奇怪的 Javascript 错误

javascript - 如何从 JQuery Dialog 调用 C# 按钮事件

javascript - 在同一页面中包含两个 jquery 库

javascript - Mirth Connect 和 HL7 v3 消息验证

javascript - Leaflet.js 快速入门基本示例演示

javascript - 将wirejs 与 jQuery 插件结合使用