从ASP.net WebMethod代码隐藏调用Web API 2服务

时间:2016-02-19 18:49:37

标签: c# jquery asp.net asp.net-web-api asp.net-web-api2

我正在尝试从我的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);

哪个州:

  

错误16非静态字段,方法或属性需要对象引用&#39; WebApi.App._default.q(字符串)&#39;

我尝试将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) {

    }
});

这很好用。

我可以做些什么来<模仿AJM 在我的代码背后的WebMethod函数

3 个答案:

答案 0 :(得分:0)

您的查询方法应该是静态的。

[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;
}

答案 1 :(得分:0)

无法实例化静态类。因此,永远无法访问非静态成员。

如果要混合和匹配静态成员,请不要使该类静态。

答案 2 :(得分:0)

结束使用:

[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