C# 从同一服务器上的ASP.NET MVC5控制器调用经典ASP

C# 从同一服务器上的ASP.NET MVC5控制器调用经典ASP,c#,asp.net,asp.net-mvc,asp-classic,httpwebrequest,C#,Asp.net,Asp.net Mvc,Asp Classic,Httpwebrequest,我正在将一个古老的经典asp项目迁移到asp.NET,但由于它是一个如此古老的大项目,我正在将其分块进行。所以我正处在一个需要他们合作的阶段。 经典asp和.NET的文件都在同一个项目中。 旧的经典asp项目使用会话变量(新的.NET项目不使用),因此我尝试调用一个经典asp页面来实现这一点 这是经典的asp“桥”: 它只读取文件,不执行脚本,因此只返回源代码,不创建会话变量 我也尝试过HttpWebRequest: try { strin

我正在将一个古老的经典asp项目迁移到asp.NET,但由于它是一个如此古老的大项目,我正在将其分块进行。所以我正处在一个需要他们合作的阶段。 经典asp和.NET的文件都在同一个项目中。 旧的经典asp项目使用会话变量(新的.NET项目不使用),因此我尝试调用一个经典asp页面来实现这一点

这是经典的asp“桥”:

它只读取文件,不执行脚本,因此只返回源代码,不创建会话变量

我也尝试过HttpWebRequest:

try
            {
                string url = "/members/includes/classes/aspbridge.asp" + "?function=session&userId=" + Url.Encode(user.UserId.ToString()) + "&username=" + Url.Encode(user.UserName);                
                Uri serverUri = new Uri(url, UriKind.Absolute);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serverUri);
                request.Method = "POST";

                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    StreamReader reader = new StreamReader(response.GetResponseStream());
                    var content = reader.ReadToEnd();
                }                      
            }

            catch (WebException we)
            {
                throw new InvalidOperationException("Error logging in user to classic asp system. User: " + user.UserId + ". Exception: " + we);
            }
但是,我得到了一个错误: 无效的URI:无法确定URI的格式

有人可以给我一些指导,我如何才能让.NET控制器调用经典的ASP页面

提前感谢,,
Rhys

出现URI错误的原因是
WebRequest
不会将to请求发送到应用程序的相对路径,而是需要绝对路径。它基本上需要像标准的web浏览器一样访问URL

因此,请确保您的URL具有完整的路径/主机:

string url = "http://localhost/members/includes/classes/aspbridge.asp" + "?function=session&userId=" + Url.Encode(user.UserId.ToString()) + "&username=" + Url.Encode(user.UserName);                
我在这里使用了
localhost
作为示例。显然,您希望将主机设置为与调用脚本相同的主机


注意:
我仍然不确定这是否会完全满足您在.NET中捕获经典ASP会话的目标,但这应该是一个更好的开始。

出现URI错误的原因是
WebRequest
不会将to请求发送到应用程序的相对路径,而是需要绝对路径。它基本上需要像标准的web浏览器一样访问URL

因此,请确保您的URL具有完整的路径/主机:

string url = "http://localhost/members/includes/classes/aspbridge.asp" + "?function=session&userId=" + Url.Encode(user.UserId.ToString()) + "&username=" + Url.Encode(user.UserName);                
我在这里使用了
localhost
作为示例。显然,您希望将主机设置为与调用脚本相同的主机


注意:
我仍然不确定这是否能完全满足您在.NET中捕获经典ASP会话的目标,但这应该是一个更好的开始。

谢谢。这并不理想,因为我必须将URL放在配置文件中,以便进行开发、测试和生产设置。有没有其他方法可以从.NET执行经典asp页面?@RhysStephens是的,您可以使用
Server.TransferRequest(“Mypage.asp?id=1”)(也适用于经典ASP)。但需要记住的一件事是,您将无法共享会话状态。您可能需要考虑cookie,甚至可能考虑数据库cookie,因此可以在不同的环境中读取。祝你好运。非常感谢。我相信我没有想到这一点。谢谢你。这并不理想,因为我必须将URL放在配置文件中,以便进行开发、测试和生产设置。有没有其他方法可以从.NET执行经典asp页面?@RhysStephens是的,您可以使用
Server.TransferRequest(“Mypage.asp?id=1”)(也适用于经典ASP)。但需要记住的一件事是,您将无法共享会话状态。您可能需要考虑cookie,甚至可能考虑数据库cookie,因此可以在不同的环境中读取。祝你好运。非常感谢。我相信我没有想到这一点。
string url = "http://localhost/members/includes/classes/aspbridge.asp" + "?function=session&userId=" + Url.Encode(user.UserId.ToString()) + "&username=" + Url.Encode(user.UserName);