加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 使用URL Rewrite和404.aspx时的回发问题

发布时间:2020-12-16 09:18:10 所属栏目:asp.Net 来源:网络整理
导读:我在我的网站上使用URL重写来获取以下URL: http://mysite.com/users/john 代替 http://mysite.com/index.aspx?user=john 要使用IIS6实现这种无扩展的重写并且无法访问托管服务器,我使用“404-approach”.当服务器找不到请求时,执行映射的404页面,因为这是一
我在我的网站上使用URL重写来获取以下URL:
http://mysite.com/users/john
代替
http://mysite.com/index.aspx?user=john

要使用IIS6实现这种无扩展的重写并且无法访问托管服务器,我使用“404-approach”.当服务器找不到请求时,执行映射的404页面,因为这是一个aspx页面,可以执行重写(我可以使用托管服务上的控制面板设置404映射).

这是Global.asax中的代码:

protected void Application_BeginRequest(object sender,EventArgs e)
{
    string url = HttpContext.Current.Request.Url.AbsolutePath;
    if (url.Contains("404.aspx"))
    {
        string[] urlInfo404 = Request.Url.Query.ToString().Split(';');
        if (urlInfo404.Length > 1)
        {
            string requestURL = urlInfo404[1];
            if (requestURL.Contains("/users/"))
            {
                HttpContext.Current.RewritePath("~/index.aspx?user=" + GetPageID(requestURL));              
                StoreRequestURL(requestURL);
            }
            else if (requestURL.Contains("/picture/"))
            {
                HttpContext.Current.RewritePath("~/showPicture.aspx?pictureID=" + GetPageID(requestURL));
                StoreRequestURL(requestURL);
            }
        }
    }
}

private void StoreRequestURL(string url)
{
    url = url.Replace("http://","");
    url = url.Substring(url.IndexOf("/"));
    HttpContext.Current.Items["VirtualUrl"] = url;
}

private string GetPageID(string requestURL)
{
    int idx = requestURL.LastIndexOf("/");
    string id = requestURL.Substring(idx + 1);
    id = id.Replace(".aspx",""); //Only needed when testing without the 404-approach
    return id;
}

在我的主页上的Page_Load中,我在form-tag的action-attribute中设置了正确的URL.

protected void Page_Load(object sender,EventArgs e)
{
    string virtualURL = (string)HttpContext.Current.Items["VirtualUrl"];
    if (!String.IsNullOrEmpty(virtualURL))
    {
        form1.Action = virtualURL;
    }
}

重写工作正常,但是当我在页面上执行回发时,不会执行回发,这可以以某种方式解决吗?

问题似乎与404方法有关,因为当我尝试没有它(并且失去无扩展功能)时,回发工作.那是我要求的时候:
http://mysite.com/users/john.aspx

这可以解决,还是有任何其他解决方案满足我的要求(IIS6,没有serveraccess / ISAPI过滤器和无扩展).

解决方法

form1.Action = Request.RawUrl

与…结合

HttpContext.Current.RewritePath("/Default.aspx",true);

对我来说效果很好.

设置表单Action属性是我缺少的那个…

谢谢你的解决方案!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读