从ASPX调用经典的ASP函数

时间:2016-11-25 08:47:39

标签: c# asp.net asp-classic

我正在开发一个 Web应用程序,其中的页面是用classic ASP编写的,并使用aspx包含在Iframes个页面中。我正在ASP.NET(使用C#)重写其中一个页面,完全删除对Iframes的依赖。 page_to_rewrite.asp调用同一应用程序中其他ASP页面中的许多其他函数 我很难从aspx.cs调用这些ASP函数。我尝试使用像这样的WebClient类:

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

使用IIS HTTP模块检查进入此应用程序的每个请求是否存在有效的会话cookie,并且如果其不存在的用户被重定向到登录页面。现在当我从aspx调用这个ASP页面url时,我得到了我的应用程序的登录页面作为响应,因为没有会话cookie存在。

请有人建议我如何成功调用ASP方法。

1 个答案:

答案 0 :(得分:0)

正如@Schadensbegrenzer在评论中所说,我只需要在请求标题中传递cookie,如下所示:

    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上的其他类似问题中,如果您从asp页面获得空白输出,则有些人建议在请求标头中包含User-Agent,因为某些Web服务器在请求标头中需要此值。看看它对你的情况是否有帮助。即使没有它,我也能工作。

此外,您还必须在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

希望它有所帮助!