1

我正在使用 ASP.NET 4 / VB.NET / IIS 来构建 Web 应用程序。人们将通过如下 URL 访问 Web 应用程序:

http://url.com/personname

例如,这里分别是 Jane Doe、John Doe 和 James Doe 的 url:

http://url.com/janedoe

http://url.com/johndoe

http://url.com/jamesdoe

我需要以某种方式将它们传递(无论输入什么名称)到 default.aspx 页面,然后该页面拉入 url 的名称部分并使用它对包含信息的数据库执行查找。关于这个特定的人,并显示基于该信息的个性化页面。

例如,Jane Doe 访问:

http://url.com/janedoe

她被透明地重定向到 default.aspx,它会提取她的名字(来自上面的 url)并对照数据库进行检查。看到她以前从未访问过该网站,她被透明地重定向到welcome.aspx,该网站要求她注册一个帐户,说:“你好,简!” 等等...

下次简访问时,她会去:

http://url.com/janedoe

她被透明地重定向到 default.aspx,它会提取她的名字(来自上面的 url)并对照数据库进行检查。看到她之前访问过并创建了一个帐户,她被透明地重定向到 login.aspx,要求她输入她上次创建的身份验证凭据。

4

1 回答 1

1

首先,您需要将请求重写为 Default.aspx。根据您的 IIS 版本(以下适用于 IIS 7.5),这很简单。在 web.config 中,规则(在 system.webServer 部分中)类似于

<rewrite>
    <rules>
        <rule name="test" enabled="true" stopProcessing="false">
            <match url="^([a-zA-Z]*)$" />
            <action type="Rewrite" url="Default.aspx?u={R:1}" />
        </rule>
    </rules>
</rewrite>

(或者您可以使用 IIS 管理器)。当然,正则表达式 [a-zA-Z] 应该适应您的业务规则 - 您可能希望允许数字。

这会重写 IIS 内的请求 - 在浏览器中看不到任何内容。现在你想“透明地重定向”它,这意味着浏览器中的 URL 应该根据用户是否已经存在而改变。

为此,在处理 Request.QueryString["u"] 后面的 Default.aspx 代码中,遵循

Response.Redirect("Welcome.aspx") or
Response.Redirect("Login.aspx")

取决于数据库查询结果。如果您不想更改浏览器 URL,请使用 Server.Transfer 而不是 Response.Redirect。

于 2012-04-26T07:11:15.527 回答