2016-02-19 35 views
-1

我想從我的ASP.net代碼後面調用我的Web API Web服務。從ASP.net調用Web API 2服務WebMethod代碼隱藏

使用的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的對象引用是所必需的非靜態字段,方法或屬性 'WebApi.App._default.q(字符串)'

我試着把HttpClient放到同一個checkQuery函數中,但似乎我不允許從asp按鈕單擊時調用該函數。

我已經使用了Web服務大多使用jQuery的Ajax這樣的:

$.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) { 

    } 
}); 

這工作得很好。

我能做些什麼來模仿AJAX在我身後的WebMethod功能代碼?

+0

的錯誤是很清楚的,你不能說從靜態的實例功能沒有提及的一個實例類,只是設置第二個是靜態的也很好,如果你必須保持該函數是實例,然後將代碼移動到一個靜態函數,並從實例中調用它 – Gusman

回答

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; 
} 
+0

當我這樣做時,我得到錯誤在同一行**錯誤不能隱式轉換類型'System.Threading.Tasks.Task '到'string'** – StealthRT

+0

我已經編輯了我的答案。嘗試這個。 –

+0

**錯誤'await'操作符只能在異步方法中使用。考慮用'async'修飾符標記此方法並將其返回類型更改爲'任務'。**就像我說的那樣,這樣做會使asp按鈕不會觸發webMethod。 – StealthRT

0

靜態類無法實例化。因此,非靜態成員永遠無法訪問。

如果要混合和匹配靜態成員,請不要使該類爲靜態。

0

Endded了使用此:

[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達斯古普塔