1

我有一个旧的 .cfm (ColdFusion) 页面,用于处理表单数据(来自远程服务器)并根据表单数据向用户发送电子邮件。现在我不再使用 ColdFusion,而是托管在“免费”的 ASP.NET (3.5) 上。我不确定我对此有多少控制权。但我在想我是否可以拥有一个 global.asax 文件,其中所有转到 .cfm 页面的请求(实际上是表单帖子)都被重定向到我可以进行所需处理的 aspx 页面。如何在共享托管服务提供商的限制范围内做到这一点?我知道我可以在 IIS 中创建一个虚拟目录。例如,www.xyz.com/processform.cfm 可以定向到 www.xyz.com/processform.aspx?

4

2 回答 2

2

有两种方法可以做到:

如果要将每个 cfm 文件映射到 aspx 页面,可以通过将 urlMapping 集合添加到 system.web 部分来实现:

<system.web>
    <urlMappings>
        <add url="~/mypage.cfm" mappedUrl="~/mypage.aspx"/>
    </urlMappings>
</system.web>

如果您想全局处理对 .cfm 文件的任何请求,您可以在开始请求事件中的 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 维护表单数据

于 2012-05-06T13:28:33.570 回答
0

Koby Mizrahy 很接近帮助我。我的问题是我在 GoDaddy 的 IIS 经典模式下运行 Blog Engine .NET 2.0 作为我网站的主要应用程序。因此 .cfm 扩展名没有被 ASP.NET 引擎处理,因此对 Web.Config 或 Global.asax 的任何更改都没有帮助。我不得不更改为集成模式。这是我所做的修复:

在 Web.Config 中,将其添加到“处理程序”节点中,以确保将处理 .cfm 的表单帖子,否则我会收到一些 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");
   }
 }

问题解决了!非常感谢米兹拉伊!

于 2012-05-06T23:19:12.187 回答