Создайте запрос на вызов WebMethods внутри .aspx в С#

У меня есть WebMethod внутри .aspx:

[WebMethod()]
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
public static XmlDocument GetSomeInformation()
{
    XmlDocument Document = new XmlDocument()
    // Fill the XmlDocument
    return Document;
}

Он отлично работает, когда я вызываю его с помощью JQuery:

    TryWebMethod = function() 
    {
        var options =
        {
            type: "POST",
            url: "MyAspxPage.aspx/GetSomeInformation",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "xml",
            cache: false,
            success: function (data, status, xhr)
            {
                alert(formatXml(xhr.responseText));
            },
            error: function (xhr, reason, text)
            {
                alert(
                    "ReadyState: " + xhr.readyState +
                    "\nStatus: " + xhr.status +
                    "\nResponseText: " + xhr.responseText +
                    "\nReason: " + reason
                    );
            }
        };
        $.ajax(options);
    }

Ну, я хочу делать именно то, что делает JQuery, но в С#...

Я использую это:

        WebRequest MyWebRequest = HttpWebRequest.Create("http://localhost/MyAspxPage.aspx/GetSomeInformation");
        MyWebRequest.Method = "POST";
        MyWebRequest.ContentType = "application/json; charset=utf-8";
        MyWebRequest.Headers.Add(HttpRequestHeader.Pragma.ToString(), "no-cache");

        string Parameters = "{}"; // In case of needed is "{\"ParamName\",\"Value\"}"...Note the \"
        byte[] ParametersBytes = Encoding.ASCII.GetBytes(Parameters);

        using (Stream MyRequestStream = MyWebRequest.GetRequestStream())
            MyRequestStream.Write(ParametersBytes, 0, ParametersBytes.Length);

        string Result = "";
        using (HttpWebResponse MyHttpWebResponse = (HttpWebResponse)MyWebRequest.GetResponse())
            using (StreamReader MyStreamReader = new StreamReader(MyHttpWebResponse.GetResponseStream()))
                Result = MyStreamReader.ReadToEnd();

        MessageBox.Show(Result);

Это работает, но я хотел бы знать, есть ли лучший способ или как сделать запрос асинхронным. Спасибо.


person Fraga    schedule 26.09.2010    source источник


Ответы (2)


Загляните в класс WebClient. Также вам, вероятно, следует использовать запрос GET для получения данных.

    // Create web client.
    WebClient webClient = new WebClient();

    // Download your XML data
    string xmlData= webClient.DownloadString("MyAspxPage.aspx/GetSomeInformation");
person BrokenGlass    schedule 26.09.2010
comment
Но как я могу отправить параметры с помощью веб-клиента? - person Fraga; 26.09.2010
comment
проверьте метод UploadValues, также см. > stackoverflow.com/questions/1117421/ - person BrokenGlass; 26.09.2010

Если вызывающий код находится в том же приложении, что и файл, в котором вы определили свой WebMethod, вы можете просто преобразовать его в служебный класс и вызвать его, как любой другой метод. [WebMethod] предоставляет его как службу, но не лишает вас возможности использовать его из кода.

person SeventhCircle    schedule 26.09.2010