从 angular 调用 asmx 网络服务 2
Call asmx webservice from angular 2
我正在尝试我的第一个 Angular 2 应用程序。目前我正面临网络服务调用的问题。我有 url 的网络服务,例如 www.myserver.domain/folder/api/webservice.asmx/method
。
当我尝试使用 Firefox 调用它时,会显示该方法,如果我 运行 在本地主机上调用它,我可以正确测试它。但是如果我尝试从 angular 代码调用它,它将失败。谁能告诉我,我做错了什么?
我的代码:
@Injectable()
export class MyService {
// URL to web api
private serviceUrl = 'http://www.myserver.domain/folder/api/webservice.asmx/method';
constructor(private http: Http) { }
getData() {
let body = JSON.stringify({ Param1: "0", Param2: "0", Param3: "0" });
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
return this.http.post(this.serviceUrl, body, options)
.toPromise()
.then(response => response.json().data as MyDataClass[])
.catch(this.handleError);
}
handleError(error: any) {
console.error('An error occurred', error);
return Promise.reject(error.message || error);
}
}
作为参考,这是我的网络服务的样子:
[WebService(Namespace = "mynamespace")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class webservice: System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void List(int Param1 = 0, int Param2 = 0, int Param3 = 0)
{
//... some code to populate result of type List<Dictionary<string, string>>
data.Message = Common.TranslateToSerialize(result);
Context.Response.Write(js.Serialize(data.Message));
return;
}
感谢您提供的任何帮助。请考虑到我是 JS/Ang2 的新手,所以在询问时,请尽可能详细:)
只是为了让大家知道导致问题的原因:服务正在返回 JSON 响应,后跟 {"d" : null} 字符串。当我删除它时,一切都被正确解析。
这个问题暂时搁置。我想看看是否有人知道为什么附加这个字符串。如果您能向我解释,我会将您的答案标记为正确答案。我不知道这个字符串的来源是什么,因为 Web 服务返回 JSON 肯定没有它。
感谢所有会尝试回答/解释的人。
我正在尝试我的第一个 Angular 2 应用程序。目前我正面临网络服务调用的问题。我有 url 的网络服务,例如 www.myserver.domain/folder/api/webservice.asmx/method
。
当我尝试使用 Firefox 调用它时,会显示该方法,如果我 运行 在本地主机上调用它,我可以正确测试它。但是如果我尝试从 angular 代码调用它,它将失败。谁能告诉我,我做错了什么?
我的代码:
@Injectable()
export class MyService {
// URL to web api
private serviceUrl = 'http://www.myserver.domain/folder/api/webservice.asmx/method';
constructor(private http: Http) { }
getData() {
let body = JSON.stringify({ Param1: "0", Param2: "0", Param3: "0" });
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
return this.http.post(this.serviceUrl, body, options)
.toPromise()
.then(response => response.json().data as MyDataClass[])
.catch(this.handleError);
}
handleError(error: any) {
console.error('An error occurred', error);
return Promise.reject(error.message || error);
}
}
作为参考,这是我的网络服务的样子:
[WebService(Namespace = "mynamespace")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class webservice: System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void List(int Param1 = 0, int Param2 = 0, int Param3 = 0)
{
//... some code to populate result of type List<Dictionary<string, string>>
data.Message = Common.TranslateToSerialize(result);
Context.Response.Write(js.Serialize(data.Message));
return;
}
感谢您提供的任何帮助。请考虑到我是 JS/Ang2 的新手,所以在询问时,请尽可能详细:)
只是为了让大家知道导致问题的原因:服务正在返回 JSON 响应,后跟 {"d" : null} 字符串。当我删除它时,一切都被正确解析。
这个问题暂时搁置。我想看看是否有人知道为什么附加这个字符串。如果您能向我解释,我会将您的答案标记为正确答案。我不知道这个字符串的来源是什么,因为 Web 服务返回 JSON 肯定没有它。
感谢所有会尝试回答/解释的人。