HttpHandler用于url中的前缀

时间:2014-01-02 16:14:10

标签: c# asp.net .net http

我正在尝试将aspx中的http调用转换为https

Back Ground:我有一个位于https site.on页面的Aspx页面我参考了谷歌的脚本

Aspx页面参考:

 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" type="text/javascript"></script>

我为Prefix Http创建了一个HttpHandler IHttpHandler接口实现:

public class HttpToHttpsHandler : IHttpHandler
{
    public bool IsReusable
    {
        get { return false; }
    }

    public void ProcessRequest(HttpContext context)
    {
        try
        {
            context.Response.ContentType = "text/plain";
            if (context.Request.RawUrl.Contains("http:"))
            {
                string newUrl = context.Request.RawUrl.Replace("http", "https");
                context.Server.Transfer(newUrl);

            }
        }
        catch (Exception)
        {

            throw;
        }
    }
}

Web.Config文件注册码:

  <httpHandlers>

    <add verb="*" path="http:*" type="HttpToHttpsHandler , App_Code"/>

  </httpHandlers>

但是我没有在Http处理程序类中获得控件。可能是错误。

3 个答案:

答案 0 :(得分:1)

我想知道你的程序集是否被称为“App_Code”。在类型声明中,您必须输入程序集名称,而不是C#文件的文件夹名称。

答案 1 :(得分:0)

路径属性据我所知它是相对位置,它只能取两个值中的一个:name / file-name或要映射的扩展名/文件扩展名。像

      <add verb="*" path="*.SampleFileExtension" 
         type="Example1 " />       

或者

      <add verb="*" path="demo.*" 
         type="Example1 " />     

我尝试了这两种方法的组合,它也有效,它表示任何以测试开头的内容和任何扩展名都将由处理程序处理:

 <add  verb="*" path="test*.*"
                  name="HelloWorldHandler"
                  type="demo.HelloWorldHandler,App_Code" />

但请注意,这是一个相对路径,因此它表示它不包含来自网址的 http https 值,因此处理程序无法用于验证网址。

答案 2 :(得分:0)

您需要定义包含HttpToHandler类的程序集名称。 处理程序在程序集中定义为类HttpToHttpsHandler,如果它位于同一个项目中,那么它将是您的应用程序名称。 完成此article

<httpHandlers>
      <add verb="*" path="*.aspx" 
         type="HttpToHttpsHandler , AssemblyName" />
    </httpHandlers> 
  </system.web>

if (!Request.IsLocal && !Request.IsSecureConnection)
{
    string redirectUrl = Request.Url.ToString().Replace("http:", "https:");
    Response.Redirect(redirectUrl);
}

HttpRequest.IsSecureConnection属性确定HTTP连接是否使用安全套接字(HTTPS).- MSDN