2016-11-25 12 views
0

Я работаю на веб-приложение старый где страницы были написаны в classic ASP и завернутые в aspx страниц с использованием Iframes. Я переписываю одну из этих страниц в ASP.NET (используя C#), полностью удаляя зависимость от iframes. page_to_rewrite.asp вызывает множество других функций, присутствующих на других страницах ASP в одном приложении.
Мне грозит вызов этих функций ASP из aspx.cs. Я пытался использовать WebClient класс вроде этого:вызова классическая функция ASP от 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(); 
} 

Каждый запрос приходит к этому приложению проверяется на действительной куки сессии, используя модуль HTTP IIS, и если его нет пользователь перенаправляется на страницу входа в систему. Теперь, когда я вызываю этот URL-адрес ASP-страницы из aspx, я получаю страницу входа моего приложения в качестве ответа, поскольку нет cookie-сессии сеанса.

Может кто-нибудь может любезно предложить, как я могу успешно использовать методы ASP.

+1

В запросе GET вы не отправляете необходимый файл cookie. Убедитесь, что вы добавили файл cookie в заголовок. http://stackoverflow.com/questions/1777221/using-cookiecontainer-with-webclient-class – Schadensbegrenzer

+0

Классический ASP и ASP.net не могут видеть переменные сеанса друг друга – John

+2

'finance_util.asp? function = GetSalary? EmpId = 12345' этот запрос выглядит неправильно - должен быть 'finance_util.asp? function = GetSalary & EmpId = 12345' –

ответ

0

Как сообщил @Schadensbegrenzer в комментарии я просто должен был передать куки в заголовке запроса, как это:

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(); 
} 

В других подобных вопросов на StackOverflow некоторые люди предложили также включить User-Agent в запросе заголовок, если вы получаете пустой вывод с страницы asp, поскольку некоторые веб-серверы требуют это значение в заголовках запроса. Посмотрите, поможет ли это в вашем случае. Шахта работала даже без нее.

Кроме того, вам придется обработать запрос в вашем ASP page что-то вроде этого:

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 

Надеется, что это помогает!