从 ASP.net WebMethod 代码隐藏调用 Web API 2 服务
Calling Web API 2 service from ASP.net WebMethod codebehind
我正在尝试从我的 ASP.net 代码后面调用我的 Web API Web 服务。
使用 WebMethod 函数:
[WebMethod]
public static string checkQuery(string sql)
{
string encryptingIT = new AES().Encrypt(sql);
string result = q(encryptingIT);
return result;
}
public async Task<string> q(string encryptingIT)
{
var client = new HttpClient();
var content = new StringContent(JsonConvert.SerializeObject(new Product { query = encryptingIT, empImg = false }));
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var response = await client.PostAsync("http://dev-zzzz/newWS/theQ", content);
var value = await response.Content.ReadAsStringAsync();
return value;
}
但是,我在线上出现错误:
q(encryptingIT);
其中指出:
Error 16 An object reference is required for the non-static field, method, or property 'WebApi.App._default.q(string)'
我尝试将 HttpClient 放入相同的 checkQuery 函数中,但似乎不允许我在执行此操作时通过单击 asp 按钮调用该函数。
我主要通过 jQuery Ajax 使用 Web 服务,如下所示:
$.support.cors = true;
$.ajax({
type: "POST",
crossDomain: true,
url: "http://dev-zzzz/newWS/theQ",
beforeSend: function (xhrObj) {
xhrObj.setRequestHeader("Content-Type", "application/json");
},
data: JSON.stringify({
theID: "2135648792",
empImg: "false"
}),
dataType: "json",
success: function (msg) {
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
}
});
而且效果很好。
我可以做些什么来在我的 WebMethod 函数背后的代码中模仿 AJAX?
您的查询方法应该是静态的。
[WebMethod]
public static string checkQuery(string sql)
{
string encryptingIT = new AES().Encrypt(sql);
string result = q(encryptingIT).Result;
return result;
}
public static async Task<string> q(string encryptingIT)
{
var client = new HttpClient();
var content = new StringContent(JsonConvert.SerializeObject(new Product { query = encryptingIT, empImg = false }));
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var response = await client.PostAsync("http://dev-zzzz/newWS/theQ", content);
var value = await response.Content.ReadAsStringAsync();
return value;
}
无法实例化静态 class。因此,永远无法访问非静态成员。
如果您想混合和匹配静态成员,请不要将 class 设为静态。
最终使用了这个:
[WebMethod]
public static string checkQuery(string sql)
{
string encryptingIT = new AES().Encrypt(sql);
var client = new RestClient("http://dev-zzzz/newWS");
var request = new RestRequest("theQ/", Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddBody(new Product
{
query = encryptingIT,
empImg = false
});
IRestResponse response = client.Execute(request);
var content = response.Content;
return content;
}
谢谢@Soham Dasgupta
我正在尝试从我的 ASP.net 代码后面调用我的 Web API Web 服务。
使用 WebMethod 函数:
[WebMethod]
public static string checkQuery(string sql)
{
string encryptingIT = new AES().Encrypt(sql);
string result = q(encryptingIT);
return result;
}
public async Task<string> q(string encryptingIT)
{
var client = new HttpClient();
var content = new StringContent(JsonConvert.SerializeObject(new Product { query = encryptingIT, empImg = false }));
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var response = await client.PostAsync("http://dev-zzzz/newWS/theQ", content);
var value = await response.Content.ReadAsStringAsync();
return value;
}
但是,我在线上出现错误:
q(encryptingIT);
其中指出:
Error 16 An object reference is required for the non-static field, method, or property 'WebApi.App._default.q(string)'
我尝试将 HttpClient 放入相同的 checkQuery 函数中,但似乎不允许我在执行此操作时通过单击 asp 按钮调用该函数。
我主要通过 jQuery Ajax 使用 Web 服务,如下所示:
$.support.cors = true;
$.ajax({
type: "POST",
crossDomain: true,
url: "http://dev-zzzz/newWS/theQ",
beforeSend: function (xhrObj) {
xhrObj.setRequestHeader("Content-Type", "application/json");
},
data: JSON.stringify({
theID: "2135648792",
empImg: "false"
}),
dataType: "json",
success: function (msg) {
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
}
});
而且效果很好。
我可以做些什么来在我的 WebMethod 函数背后的代码中模仿 AJAX?
您的查询方法应该是静态的。
[WebMethod]
public static string checkQuery(string sql)
{
string encryptingIT = new AES().Encrypt(sql);
string result = q(encryptingIT).Result;
return result;
}
public static async Task<string> q(string encryptingIT)
{
var client = new HttpClient();
var content = new StringContent(JsonConvert.SerializeObject(new Product { query = encryptingIT, empImg = false }));
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var response = await client.PostAsync("http://dev-zzzz/newWS/theQ", content);
var value = await response.Content.ReadAsStringAsync();
return value;
}
无法实例化静态 class。因此,永远无法访问非静态成员。
如果您想混合和匹配静态成员,请不要将 class 设为静态。
最终使用了这个:
[WebMethod]
public static string checkQuery(string sql)
{
string encryptingIT = new AES().Encrypt(sql);
var client = new RestClient("http://dev-zzzz/newWS");
var request = new RestRequest("theQ/", Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddBody(new Product
{
query = encryptingIT,
empImg = false
});
IRestResponse response = client.Execute(request);
var content = response.Content;
return content;
}
谢谢@Soham Dasgupta