我有一个遗留的.cfm(ColdFusion)页面,用于处理表单数据(来自远程服务器)并根据表单数据发送用户的电子邮件。现在我不再使用ColdFusion而是托管在'免费'ASP.NET(3.5)。我不确定我对此有多少控制权。但我在想是否可以有一个global.asax文件,其中所有发送到.cfm页面的请求(实际上是表单帖子)都被重定向到我可以进行所需处理的aspx页面。 如何在共享主机提供商限制内完成?我知道我可以在IIS中创建一个虚拟目录。例如,www.xyz.com / processform.cfm可以定向到www.xyz.com/processform.aspx?
答案 0 :(得分:2)
有两种方法可以做到:
如果要将每个cfm文件映射到aspx页面,可以通过将urlMapping集合添加到system.web部分来实现:
<system.web>
<urlMappings>
<add url="~/mypage.cfm" mappedUrl="~/mypage.aspx"/>
</urlMappings>
</system.web>
如果要全局处理.cfm文件的任何请求您可以在Begin请求事件中的global.asax中执行此操作:
protected void Application_BeginRequest(object sender, EventArgs e)
{
if(HttpContext.Current.Request.CurrentExecutionFilePathExtension == ".cfm")
{
// Do what ever you need to do
}
}
这两种方式都不依赖于主机,所以godaddy不是问题。
在第一个选项中,表单数据将在第二个选项中保持,您必须编写逻辑以将表单数据传递到要重定向的页面。
如果我没错,但我不确定,也许Server.Transfer维护表单数据
答案 1 :(得分:0)
Koby Mizrahy接近帮助我。我的问题是我在GoDaddy的IIS经典模式下运行Blog Engine .NET 2.0作为我网站的主要应用程序。因此,ASP.NET引擎不处理.cfm扩展名,因此对Web.Config或Global.asax的更改都没有帮助。我不得不改为集成模式。以下是我要解决的问题:
在Web.Config中,在“处理程序”节点中添加了这个,以确保处理.cfm的Form Posts,否则我会收到405错误。
<add name="ColdFusion" path="*.cfm" verb="*" type="System.Web.StaticFileHandler" resourceType="Unspecified" preCondition="integratedMode" />
然后在global.asax中,我在Application_beginrequest处理程序
中有这个if (Request.Url.ToString().Contains("TourEmail-act.cfm"))//
{
Server.Transfer("/360Flash/TourEmail-act.aspx");
}
}
问题解决了!非常感谢Mizrahy!