C# 重定向URL';s

C# 重定向URL';s,c#,asp.net,redirect,C#,Asp.net,Redirect,如何将www.mysite.com/picture/12345重定向到www.mysite.com/picture/some-picture-title/12345?现在,“/picture/12345”在picture.aspx?picid=12345上被重写,第二种形式的url(picture/picture title/12323到picture.aspx?picid12323)也是如此。我不能将第一种形式的url重写为第二种形式,因为我必须从数据库中获取图片标题 首先,这个问题看起来很简

如何将www.mysite.com/picture/12345重定向到www.mysite.com/picture/some-picture-title/12345?现在,“/picture/12345”在picture.aspx?picid=12345上被重写,第二种形式的url(picture/picture title/12323到picture.aspx?picid12323)也是如此。我不能将第一种形式的url重写为第二种形式,因为我必须从数据库中获取图片标题


首先,这个问题看起来很简单,但考虑到解析每个请求的时间,正确的做法是什么?

不知道什么是ASP.NET技术(Webforms或MVC),我假设它是Webforms

您可以查看URL重定向并构建自己的规则。你这样做一次只是为了应用于所有看起来像你想要的链接

我对此有点怀疑

如果您希望在涉及到该地址时重定向到新地址,那么这也很容易

首先,让我们重用代码,因此您将首先重定向到一个名为redirectme.aspx的commum页面

在该页面中,您可以使用ServerVariables或在QueryString中传递Url来获得REFERER地址,这是您的选择,然后您可以附加标题名,如:

private void Redirect()
{
    // get url: www.mysite.com/picture/12345
    string refererUrl = Request.ServerVariables["HTTP_REFERER"];    // using the ServerVariables or Request.UrlReferrer.AbsolutePath;
    //string refererUrl = Request.QueryString["url"];                 // if you are redirecting as Response.Redirect("redirectme.aspx?" + Request.Url.Query);

    // split the URL by '/'
    string[] url = refererUrl.Split('/');

    // get the postID
    string topicID = url[url.Length-1]; 

    // get the title from the post
    string postTitle = GetPostTitle(topicID);

    // redirect to: www.mysite.com/picture/some-picture-title/12345
    Response.Redirect(
        String.Format("{0}/{1}/{2}",
            refererUrl.Substring(0, refererUrl.Length - topicID.Length),
            postTitle,
            topicID));
}
要在服务器上节省时间,请在第一页事件中执行此操作

protected void Page_PreInit(object sender, EventArgs e)
{
    Redirect();
}

我想你需要一个共同的模式,而不仅仅是一次性的解决方案。i、 e.您需要它来为12345和12346以及任何其他ID工作。您可能正在寻找
URLRedirection
,并应用正则表达式来识别将重定向到目标URI的源URI

,如果您正在运行IIS7,那么(对于webforms和MVC),URL重写模块()值得一看


支持重定向的模式匹配和正则表达式,说明它们是临时的还是永久的,并且它们都可以通过控制台进行管理。为什么不必编写代码?

去读一下balexandre发布的Scott Guthrie的文章。它需要几百行代码,我不打算在回答中发布这些代码。您需要的所有示例代码/示例都在那篇文章中。如果您在IIS7上运行,URL重写模块是迄今为止最简单的。关键是要确保在呈现页面时使用新的URL。