【问题标题】:Asp.net processing of .CFM files or Redirects from .cfm to .aspx page?.CFM 文件的 Asp.net 处理或从 .cfm 重定向到 .aspx 页面?
【发布时间】:2012-05-15 06:59:42
【问题描述】:

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

【问题讨论】:

    标签: asp.net redirect coldfusion


    【解决方案1】:

    有两种方法:

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

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

    如果您想全局处理对 .cfm 文件的任何请求,您可以在 Global.asax 的 Begin 请求事件中进行:

     protected void Application_BeginRequest(object sender, EventArgs e)
     {
            if(HttpContext.Current.Request.CurrentExecutionFilePathExtension == ".cfm")
            {
                // Do what ever you need to do
            }
     }
    

    两种方式都不依赖主机,所以godaddy不是问题。

    在第一个选项中,表单数据将被维护,而在第二个选项中,您必须编写逻辑以将表单数据传递到要重定向的页面。

    如果我没记错,但我不确定,也许 Server.Transfer 维护表单数据

    【讨论】:

    • 嗨,我还在努力。一个复杂的因素是,它是在远程服务器上运行的 Flash Player,它将表单发布数据发送到xyz.com/xxx.cfm 页面,到目前为止,您的解决方案无法正常工作。我正在尝试首先从 aspx 页面模拟 Post...
    • 我认为您的解决方案不会按原样工作。从远程服务器发布时出现错误。错误页面确实显示了带有 .cfm 页面的目标服务器的 url,错误是:405 - 不允许用于访问此页面的 HTTP 动词。您正在查找的页面无法显示,因为尝试访问的方法(HTTP 动词)无效。 web.config 拒绝绝对 URL,这就是重定向失败的原因?谢谢。
    • 你能把web.config的相关部分贴出来吗?
    • 我也在尝试您的 global.asax 解决方案。但两者都不起作用: if (HttpContext.Current.Request.CurrentExecutionFilePathExtension == ".cfm") // if (HttpContext.Current.Request.CurrentExecutionFilePath.Contains(".cfm")) 在“包含”服务器传输的情况下不起作用工作。如果是你原来的'if',实际上有一个错误
    【解决方案2】:

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

    问题解决了!非常感谢 Mizrahy!

    【讨论】:

    • 还有一件事:我不得不从 web.config 文件中删除以下内容,因为它产生了一些“编码”错误:
    猜你喜欢
    • 1970-01-01
    • 2014-10-04
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    相关资源
    最近更新 更多