处理不带扩展名的请求






2.60/5 (3投票s)
如何处理没有扩展名的请求。
引言
本文档解释了如何处理没有添加扩展名的 Web 请求。这并非 URL 重写,但类似重写。
背景
我们将使用 IIS 属性和一些代码来捕获没有扩展名的 URL。假设我们需要捕获以下 URL,或者希望它们能够工作:
- http://mysite.com/imran/
- http://mysite.com/armaan/
Using the Code
如上所述,我们希望处理没有扩展名的 URL 并给出适当的结果。在我们的示例中,URL 不包含扩展名,并且在收到此类请求时,我需要显示特定用户的个人资料,即 Imran 的个人资料和 Armaan 的个人资料。
为此,我们需要做两件事:首先,配置 IIS 将此类请求重定向到 ASPX 页面,然后编写代码来获取 URL 并重定向到请求的页面。
让我们首先进行 IIS 配置。
通常,当您发送请求时,它会查找您请求的目录;如果找到,我们将看到应用程序的类型和默认页面。在我们的例子中,我们正在查找 Imran 或 Armaan;由于目录不存在,IIS 会给您一个 404 错误并显示默认的 404 错误页面,如以下图像所示:
现在,我们在 IIS 方面做的第一个更改。我们需要将默认的 404 页面更改为我们自己的页面。为此,我们需要将消息类型值更改为 URL 并提供我们应用程序的 URL。我们将将其重定向到 /MySite/Handle404.aspx。
通过进行此更改,我们可以在 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 并对其进行解析,以获取用户名,即 imran 或 armaan,并进行 Server.Transfer
,以便 URL 不受影响并且页面将显示。
有很多情况下,404 会重定向到 Handle404 页面,我们需要确保代码仅处理显示个人资料的请求。
问题或注意事项
您需要确保目录结构。我的用户名是 Admin,因此我的个人资料 URL 将是 http://MySite/Admin/。但是,如果 Admin 在您的网站结构中是一个文件夹呢?它将转到 Admin 目录并查找默认页面。此外,如果您应用身份验证模式并且 Admin 目录需要身份验证,它将被重定向到登录页面或要求提供凭据。
因此,您需要确保用户名和目录结构才能实现此目的。