代码之家  ›  专栏  ›  技术社区  ›  JasCav

response.addheader的相对路径

  •  1
  • JasCav  · 技术社区  · 14 年前

    我正在运行计时器,并在用户更改其密码后执行重定向(亦称,通知他们密码已更改,然后将其发送回主页)。但是,我似乎无法在下面的代码中执行相对路径。下面列出的是我想要的 喜欢 要做:

    Response.AddHeader("REFRESH", "2;URL="~/pages/home.aspx");
    

    为什么这个不起作用?我怎样才能让它工作?(我知道我可以在站点的其他部分执行相对路径,但这是因为它在运行服务器端。)谢谢。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Darin Dimitrov    14 年前

    您需要为刷新头指定一个绝对URL。看一看 this post 显示如何从relative获取绝对URL(可以使用 ResolveServerUrl 显示在那里):

    Response.AddHeader("REFRESH", "2;url=" + ResolveServerUrl("~/pages/home.aspx"));
    

    供参考:

    /// <summary>
    /// This method returns a fully qualified absolute server Url which includes
    /// the protocol, server, port in addition to the server relative Url.
    /// 
    /// Works like Control.ResolveUrl including support for ~ syntax
    /// but returns an absolute URL.
    /// </summary>
    /// <param name="ServerUrl">Any Url, either App relative or fully qualified</param>
    /// <param name="forceHttps">if true forces the url to use https</param>
    /// <returns></returns>
    public static string ResolveServerUrl(string serverUrl, bool forceHttps)
    {
        // *** Is it already an absolute Url?
        if (serverUrl.IndexOf("://") > -1)
            return serverUrl;
    
        // *** Start by fixing up the Url an Application relative Url
        string newUrl = ResolveUrl(serverUrl);
    
        Uri originalUri = HttpContext.Current.Request.Url;
        newUrl = (forceHttps ? "https" : originalUri.Scheme) + 
                 "://" + originalUri.Authority + newUrl;
    
        return newUrl;
    } 
    
    /// <summary>
    /// This method returns a fully qualified absolute server Url which includes
    /// the protocol, server, port in addition to the server relative Url.
    /// 
    /// It work like Page.ResolveUrl, but adds these to the beginning.
    /// This method is useful for generating Urls for AJAX methods
    /// </summary>
    /// <param name="ServerUrl">Any Url, either App relative or fully qualified</param>
    /// <returns></returns>
    public static string ResolveServerUrl(string serverUrl)
    {
        return ResolveServerUrl(serverUrl, false);
    }