65.9K
CodeProject 正在变化。 阅读更多。
Home

处理不带扩展名的请求

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.60/5 (3投票s)

2008年9月10日

CPOL

2分钟阅读

viewsIcon

15740

如何处理没有扩展名的请求。

引言

本文档解释了如何处理没有添加扩展名的 Web 请求。这并非 URL 重写,但类似重写。

背景

我们将使用 IIS 属性和一些代码来捕获没有扩展名的 URL。假设我们需要捕获以下 URL,或者希望它们能够工作:

  • http://mysite.com/imran/
  • http://mysite.com/armaan/

Using the Code

如上所述,我们希望处理没有扩展名的 URL 并给出适当的结果。在我们的示例中,URL 不包含扩展名,并且在收到此类请求时,我需要显示特定用户的个人资料,即 Imran 的个人资料和 Armaan 的个人资料。

为此,我们需要做两件事:首先,配置 IIS 将此类请求重定向到 ASPX 页面,然后编写代码来获取 URL 并重定向到请求的页面。

让我们首先进行 IIS 配置。

通常,当您发送请求时,它会查找您请求的目录;如果找到,我们将看到应用程序的类型和默认页面。在我们的例子中,我们正在查找 ImranArmaan;由于目录不存在,IIS 会给您一个 404 错误并显示默认的 404 错误页面,如以下图像所示:

IIsSetting1.JPG

现在,我们在 IIS 方面做的第一个更改。我们需要将默认的 404 页面更改为我们自己的页面。为此,我们需要将消息类型值更改为 URL 并提供我们应用程序的 URL。我们将将其重定向到 /MySite/Handle404.aspx

IIsSetting2.JPG

通过进行此更改,我们可以在 ASPX 页面中进行控制,因此,每当我们的应用程序中发生 404 错误时,它将被重定向到 Handle404.axpx,我们可以在其中编写一些代码来实现我们的目标。

让我们检查 Handle404.aspx 的代码部分。

protected override void OnInit(EventArgs e)
{

    if (Request.Url.ToString().Contains("404;"))
    {
        string[] urlInfo404 = Request.Url.Query.ToString().Split(';');
        if (urlInfo404.Length > 1)
        {
            string strRequestUrl = urlInfo404[1].Replace
                  (":" + Request.Url.Port + "/", "/");

            if (!strRequestUrl.EndsWith("/"))
            {
                strRequestUrl = 
                    strRequestUrl.Insert(strRequestUrl.Length, "/");
                Response.Redirect(strRequestUrl);
            }
            string[] urlInfoFavAddress = strRequestUrl.Split('/');

            string strUser = urlInfoFavAddress[urlInfoFavAddress.Length - 2];

            Server.Transfer(string.Concat("~/EditProfile.aspx?usr=", strUser));
        }
    }
    base.OnInit(e);
}

当发生此类重定向时,404 URL 将包含在查询字符串中,如下所示:

https:///MySite/Handle404.aspx?404;http://MySite/imran

我们获取 404 URL 并对其进行解析,以获取用户名,即 imranarmaan,并进行 Server.Transfer,以便 URL 不受影响并且页面将显示。

有很多情况下,404 会重定向到 Handle404 页面,我们需要确保代码仅处理显示个人资料的请求。

问题或注意事项

您需要确保目录结构。我的用户名是 Admin,因此我的个人资料 URL 将是 http://MySite/Admin/。但是,如果 Admin 在您的网站结构中是一个文件夹呢?它将转到 Admin 目录并查找默认页面。此外,如果您应用身份验证模式并且 Admin 目录需要身份验证,它将被重定向到登录页面或要求提供凭据。

因此,您需要确保用户名和目录结构才能实现此目的。

© . All rights reserved.