重写动态URL ASP.net

问题描述 投票:0回答:1

我知道如何将 URL 重写为

web.conf
但问题是我必须从 URL 中给出的 id 知道将哪个名称放入重写的 URL 中。例如 foo/5 应该是 foo/bar 因为在数据库中 id 5 的名称为“bar”。 我还有类方法告诉我哪个名称分配给哪个 id。

所以,我想从web.config中调用该类来获取相应id的确切名称,然后重写URL 我看到了使用

custom configuration class
的可能性,但不知道如何使用它。

您能告诉我如何做或给我另一项建议吗?

asp.net url-rewriting web-config
1个回答
0
投票

总体概念是我获取传入的 url(请求)并将其映射到特定页面。就像

/blog/my-awesome-post
将被重写为
Blog.aspx?id=5

public class UrlRewriteModule : IHttpModule
{
    public void Dispose() 
    {
        // perform cleanup here if needed.
    }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(context_BeginRequest); // attach event handler for BeginRequest event.
    }

    void context_BeginRequest(object sender, EventArgs e)
    {
            // get the current context.
            HttpContext context = ((HttpApplication)sender).Context;

            // the requested url
            string requestedUrl = context.Request.Path; // e.g. /blog/my-awesome-post

            // if you want to check for addtional parameters from querystring.
            NameValueCollection queryString = context.Request.QueryString;

            // perform db calls, lookups etc to determine how to rewrite the requested url.             
            // find out what page to map the url to.
            // lets say that you have a page called Blog, and 'my-awesome-post' is the title of blog post with id 5.
            string rewriteUrl = "Blog.aspx?id=5";

            // rewrite to the path you like.
            context.RewritePath(rewriteUrl);
    }
}

您需要将模块添加到 web.config 中的模块列表中:

IIS 7 之前版本:

<system.web>
    <httpModules>
          <add name="UrlRewriteModule" type="Assembly.Name.UrlRewriteModule, Your.Namespace.Here" />
           ....
     </httpModules>
     .....
</system.web>

IIS 7 及更高版本:

<system.webServer>
    <modules>
          <add name="UrlRewriteModule" type="Assembly.Name.UrlRewriteModule, Your.Namespace.Here" />
          ....
     </modules>
    ....
</system.webServer>
© www.soinside.com 2019 - 2024. All rights reserved.