在服务器上,有什么方法可以区分内部和外部 REST API 请求吗?
为什么?
我想区分这两个来源的原因是,根据受访者给出的建议,我可能想要返回不同的数据集,具体取决于谁试图发出请求。
概括
我对内部的定义可能不正确。在这种情况下,“内部”是指从与处理该请求的页面相同的域的 XHTTP 请求发出的请求。
外部调用可能是用户从另一个域创建 Curl 请求。
例如:
http.service.ts
内部角度 6 请求
fetchLogin(formData: any): Observable<any> {
let req = null;
let headers = null;
headers = {
reportProgress: false,
headers: new HttpHeaders({
'email': formData['email'],
'password': formData['password']
})
};
req = new HttpRequest('POST', this.restApiUrl + this.restApiUrlEndpoint + '/oauth/', '', headers);
return this.http.request(req)
.map( (data) => {
return 'body' in data ? data['body'] : null;
})
.pipe(
catchError(this.handleError)
);
}
Run Code Online (Sandbox Code Playgroud)
模板.cfm
外部冷聚变请求
<cfset httpUrl = request.restApiUrl …Run Code Online (Sandbox Code Playgroud) 我希望在没有 Workbench 的情况下安装 MySQL Server 5.6。我使用 Navicat 与 MySQL 交互。事实上,我想安装最低限度,这样我就可以用我的 Coldfusion 查询连接一个数据库:
<cfquery>
Run Code Online (Sandbox Code Playgroud)
过去,模块和预安装配置的数量让我不知所措。
有人可以为我提供使用最低配置的安装例程吗?
环境
视窗 10 64 位
更新
感谢所有伟大的答案。所以,我尝试了一些选项,发现最简单的实际上是使用安装程序,但我没有在第一个屏幕上使用“Developer”实例,而是选择了“Server”实例,这令人惊讶,只安装 MySQL 服务器,没有别的。设置大约需要 20 秒,并将文件数保持在最低限度。没有 VS 或 Workbench 模块下载。然后我在下一个屏幕上使用了“开发人员”计算机选项,就是这样!我能够将 Navicat GUI 连接到服务器,没有任何问题,当然,默认情况下,安装程序将 MySQL 设置为 Windows 服务,在计算机重新启动后自动启动。
所以,我还没有连接任何 Coldfusion DSN 或执行任何查询,但我相当确定,一切都应该正常工作!
当我使用以下代码时:
<cftry>
<cfif CompareNoCase(request.engine,"Railo") EQ 0>
<cfset RestInitApplication(request.filepath & "\com\api",local.serviceMapping,false,request.webAdminPassword) />
<cfelse>
<cfset RestInitApplication(request.filepath & "\com\api",local.serviceMapping) />
</cfif>
<cfcatch>
</cfcatch>
</cftry>
Run Code Online (Sandbox Code Playgroud)
Adobe Coldfusion引发以下编译错误:
Parameter validation error for the RESTINITAPPLICATION function.
The function accepts 1 to 3 parameters.
Run Code Online (Sandbox Code Playgroud)
谁能建议我可以阻止Coldfusion抛出错误的方法?
如果我尝试执行以下操作:
<cfif CompareNoCase(request.engine,"Railo") EQ 0>
<cfset RestInitApplication(dirPath=request.filepath & "\com\api",serviceMapping=local.serviceMapping,password=request.webAdminPassword) />
<cfelse>
<cfset RestInitApplication( dirPath=request.filepath & "\com\api", serviceMapping=local.serviceMapping) />
</cfif>
Run Code Online (Sandbox Code Playgroud)
ACF引发另一种编译错误:
Parameter validation error for the RESTINITAPPLICATION function.
A built-in ColdFusion function cannot accept an assignment statement as a parameter, although it can …Run Code Online (Sandbox Code Playgroud) 我真的希望你能帮助我.我通常将会话变量读入局部变量,这样我就不必创建无限的读锁.但我遇到了一些有趣的行为.请注意,为简洁起见,我没有应用任何写锁:
考虑以下:
例1:
<cfset session.testvalue = 1 />
<cfset lcktestvalue = session.testvalue />
<cfoutput>#lcktestvalue#</cfoutput><br />
<cfset session.testvalue = 2 />
<cfoutput>#lcktestvalue#</cfoutput>
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
1
1
例2:
<cfset session.testvalue1.item = 1 />
<cfset lcktestvalue1 = session.testvalue1 />
<cfoutput>#lcktestvalue1.item#</cfoutput><br />
<cfset session.testvalue1.item = 2 />
<cfoutput>#lcktestvalue1.item#</cfoutput>
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
1
2
我试图弄清楚为什么第二个例子,更新'lcktestvalue1.item',当值只读一次?我希望示例1和2生成相同的输出,以下以生成第二个示例的输出:
例3:
<cfset session.testvalue1.item = 1 />
<cfset lcktestvalue1 = session.testvalue1 />
<cfoutput>#lcktestvalue1.item#</cfoutput><br />
<cfset session.testvalue1.item = 2 />
<cfset lcktestvalue1 = session.testvalue1 />
<cfoutput>#lcktestvalue1.item#</cfoutput>
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
1
2
我能想到的这种行为的唯一原因是第二个例子,它使用了一个结构内部的结构.但是,我无法扩展这个概念.你能?我真的需要理解这一点,因为我正在创建一个购物车,它广泛使用了示例2中的方法.它实际上工作正常,但我不确定为什么,我担心在负载下,它可能会失败?
感谢您提供的任何帮助.