asp.net handler.ashx文件中的httphandler未触发* .aspx文件

时间:2015-11-03 10:58:54

标签: c# asp.net redirect httphandler

我有一个基于asp.net webform的旧网站。我需要使用相同的网站将网址更改为友好网站,并保持对旧网址的支持。

为此,我想到了使用HTTP Handler,以便我可以拦截旧的url并使用新的url将它们重定向到正确的页面

示例

old url: /news.aspx?newsID=10

new url: /news/10/title-of-the-news

使用处理程序文件URLHandler.ashx我想将页面重定向到右页或重新创建新网址。

到目前为止我做了什么

  1. 创建URLHandler.ashx写入逻辑以重定向到新网址,或者让我们说我创建了新网址并重定向了网页

  2. 在we.config中注册了处理程序

  3. 当我运行/news.aspx?newsID=10时,这对我不起作用首先它应该执行处理程序文件并根据网址重定向到页面。

    我不确定我是否做错了。

    web.config

      <system.webServer>
        <!-- Un Comment This Part on web server     Un Comment This Part on web server -->
        <handlers>
          <add name="url-handler" verb="*" path="*.aspx"  type="URLHandler" resourceType="Unspecified" />
          <add name="ChartImg" path="ChartImg.axd" verb="GET,HEAD,POST" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        </handlers>
    
        <validation validateIntegratedModeConfiguration="false" />
      </system.webServer>
    

    SAMPLE处理程序文件代码

    <%@ WebHandler Language="C#" Class="URLHandler" %>
    
    using System;
    using System.Web;
    
    public class URLHandler : IHttpHandler {
    
        public void ProcessRequest (HttpContext context) {
           // context.Response.ContentType = "text/plain";
            //context.Response.Write("Hello World");
            HttpResponse r = context.Response;
    
            r.Write(context.Request.Url.AbsoluteUri);
        }
    
        public bool IsReusable {
            get {
                return false;
            }
        }
    
    }
    

1 个答案:

答案 0 :(得分:1)

将代码放在.cs文件中。我已经复制了你的项目(代码在.ashx文件中),并收到以下错误:

  

无法加载“URLHandler”类型。

     

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

将代码放在.cs的{​​{1}}文件中会导致其按预期运行。我怀疑这与App_Code文件中的代码编译方式略有不同,以说明它响应特定网址(.ashx)这一事实有关因为它是一个物理文件,而不是一个从URLHandler.ashx引用的类,这可能足以破坏该类型的名称/位置,因此IIS在配置中引用时无法找到它。