2016-11-25 4 views
0

Ich arbeite an einer alten Web-Anwendung, in den Seiten in classic ASP geschrieben wurden und in aspx Seiten gewickelte Iframes verwenden. Ich überschreibe eine dieser Seiten in ASP.NET (mit C#) die Abhängigkeit von Iframes insgesamt zu entfernen. Die page_to_rewrite.asp rufen viele andere Funktionen auf, die in anderen ASP-Seiten in derselben Anwendung vorhanden sind.
Ich habe Schwierigkeiten beim Aufruf dieser ASP-Funktionen von aspx.cs. Ich habe versucht, WebClient Klasse wie folgt zu verwenden:Anruf klassische ASP-Funktion von ASPX

using (WebClient wc = new WebClient()) 
{ 
      Stream _stream= wc.OpenRead("http://localhost/Employee/finance_util.asp?function=GetSalary?EmpId=12345"); 
      StreamReader sr= new StreamReader(_stream); 
      string s = sr.ReadToEnd(); 
      _stream.Close(); 
      sr.Close(); 
} 

Jede Anfrage auf diese Anwendung kommt, wird für eine gültige Session-Cookie mit einem IIS HTTP-Modul überprüft und wenn es nicht vorhanden Benutzer umgeleitet zur Login-Seite. Jetzt, wenn ich diese Asp-Seite URL von Aspx aufrufen, bekomme ich die Anmeldeseite meiner Anwendung als Antwort, da kein Sitzungscookie vorhanden ist.

Kann jemand bitte bitte vorschlagen, wie kann ich die ASP-Methoden erfolgreich aufrufen.

+1

In Ihrer GET-Anfrage müssen Sie nicht die erforderliche Cookie senden. Stellen Sie sicher, dass Sie den Cookie zur Kopfzeile hinzufügen. http://stackoverflow.com/questions/1777221/using-cookiecontainer-with-webclient-class – Schadensbegrenzer

+0

klassischen ASP und ASP.net kann nicht jeder des anderen Session-Variablen siehe – John

+2

'finance_util.asp? Funktion = getSalary? EmpID = 12345' diese Abfragezeichenfolgeflag sieht falsch - sollte 'finance_util.asp Funktion = getSalary & EmpID = 12345' –

Antwort

0

Wie @Schadensbegrenzer im Kommentar gesagt, ich hatte einfach so das Cookie im Request-Header weitergeben müssen:

using (WebClient wc = new WebClient()) 
{ 
    wc.Headers[HttpRequestHeader.Cookie] = "SessionID=" + Request.Cookies["SessionID"].Value; 
    Stream _stream= wc.OpenRead("http://localhost/Employee/finance_util.asp?function=GetSalary&EmpId=12345"); 
    StreamReader sr= new StreamReader(_stream); 
    string s = sr.ReadToEnd(); 
    _stream.Close(); 
    sr.Close(); 
} 

In ähnliche Fragen auf Stackoverflow einige Leute auch User-Agent in der Anfrage sind vorgeschlagen haben header, wenn Sie von der ASP-Seite eine leere Ausgabe erhalten, da einige Webserver diesen Wert in den Anforderungsheadern benötigen. Sehen Sie, ob es in Ihrem Fall hilft. Meins hat sogar ohne es funktioniert.

Auch Sie die Anfrage in Ihrer ASP page so etwas wie damit umgehen müssen:

Dim param_1 
Dim param_2 
Dim output 

param_1 = Request.QueryString("function") 
param_2 = Request.QueryString("EmpId") 

If param_1 = "GetSalary" Then 
    output = GetSalary(param_2) 
    response.write output 
End If 

Hoffe, es hilft!