27. maj 2013 - 12:34
Der er
10 kommentarer
Kalde ASP.NET WebMethod med argumenter fra C# applikation
Hej Jeg har en WebMethod I en aspx side [WebMethod(EnableSession = true)] public static string GetColumns(string dataSource) { return dataSource; // Min metode goer selvfoelgelig mere end det her :-) } Jeg kalder den successfuldt fra JQuery med var url = getRoot() + "Services/Table.aspx/GetColumns"; $.ajax({ type: "POST", url: url, async: false, data: "{ 'dataSource': '" + encodeURIComponent(getProperty(dboid, "DataSource")) + "'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (result) { dostuff }, error: function (result) { argh } }); Men jeg har ogsaa brug for at foretage samme kald fra en anden C# application. Jeg har forsoegt med string url = Controller.TheConnection.Url + "/Services/Table.aspx/GetColumns"; string dataSource = "dataSource=" + WebUtility.HtmlEncode(AttributeData.Properties["DataSource"]); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; using (Stream requestStream = request.GetRequestStream()) { using (var streamWriter = new StreamWriter(requestStream)) { streamWriter.Write(Encoding.UTF8.GetBytes(dataSource)); } } HttpWebResponse response = (HttpWebResponse)request.GetResponse(); string a = new StreamReader(response.GetResponseStream()).ReadToEnd(); Men jeg faar bare en tom streng tilbage. Jeg er sikker paa url er den samme I baade JQuery og C# .. hvad goer jeg galt? tak
Annonceindlæg fra Cognizant
Har du prøvet at sætte et break poing i din webapp? Og se om du reelt rammer den url? Og det rent faktisk kommer noget tilbage?
Et breakpoint bliver ikke ramt Den brokker sig heller ikke naar den returnerer den tomme string
Hvordan kan et break point blive svært?
Jeg forstar ikke svaret Et breakpoint I WebMetoden bliver ikke ramt
Hvis dit break point i din WebMetode ikke bliver ramt ... så er det jo enten fordi du ikke har attached til den korrekt web process eller fordi din metode rent faktisk ikke bliver ramt.
Ja, eller at jeg enten kalder den forkert eller at metoden ikke er dekoreret korrekt for at blive kaldt fra C# Faktum er at min url I C# og I JQuery er praecis den samme dvs Controller.TheConnection.Url + "/" == getRoot() Men hvor JQuery er I stand til at returnere noget, saa faar jeg ikke noget I C#. Saa et eller andet sted I min metode/kaldet dertil gaar der noget galt, jeg ved bare ikke hvor
Hvis du kan lave et simpelt eksempel hvor det ikke virker, så skal jeg nok kigge på det ... Smid det på DropBox, SkyDrive, GoogleDrive, osv. mvh
Hej Jeg har faktisk lige fundet ud af det ... eller I hvert fald en workaround Hvis jeg I mit C# kald sender JSON med I stedet for, saa virker det: string dataSource = "dataSource=" + WebUtility.HtmlEncode(AttributeData.Properties["DataSource"]); -> string dataSource = "{'dataSource': '" + + WebUtility.HtmlEncode(AttributeData.Properties["DataSource"]) + '}"; og request.ContentType = "application/x-www-form-urlencoded"; -> request.ContentType = "application/json; charset=utf-8"; og streamWriter.Write(Encoding.UTF8.GetBytes(dataSource)); -> streamWriter.Write(dataSource); Men hvorfor jeg ikke kan faa den foerste approach til at virke ved jeg ikke :-) Anyway ... jeg vil genre give dig de 30 point for forsoeget. Smid et svar
Min antagelse må være at den forventer enten: application/xml application/json og er din content type ikke en af overstående ... måske incl flere, så rammer den ikke din webmethod. Du kan måske prøve at se hvad din ContentType før stod til. mvh
Det staar to gange I traaden request.ContentType = "application/x-www-form-urlencoded"; Og grunden til at den er sat til det er at det har jeg set I flere eksempler. Men det virker altsaa ikke som forventet. Saa spoergsmaalet er jo om der I attributten [WebMethod] saa ligger en antagelse om ContentType
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.