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