隐藏页面扩展时使用查询字符串的问题

时间:2016-10-26 17:38:04

标签: c# asp.net url query-string

我在C#中使用ASP.NET(Visual Studio 2015)。我在Global.asax文件中实现了以下代码段:

void Application_BeginRequest(object sender, EventArgs e)
{
    //Removes requirement of having ".aspx" in the URL
    String WebsiteURL = Request.Url.ToString();
    String[] SplitedURL = WebsiteURL.Split('/');
    String[] Temp = SplitedURL[SplitedURL.Length - 1].Split('.');

    // This is for aspx page
    if (!WebsiteURL.Contains(".aspx") && Temp.Length == 1)
    {
        if (!string.IsNullOrEmpty(Temp[0].Trim()))
            Context.RewritePath(Temp[0] + ".aspx");
    }

 }

这样,而不是在页面URL中强制扩展:

  

http://www.example.net/SomePage.aspx

我可以省略扩展程序以重定向到同一页面:

  

http://www.example.net/SomePage

现在的问题是,如果我向URL添加查询字符串,它就无法再找到该页面了。例如:

  

http://www.example.net/SomePage?name=value

导致404 Not Found错误。

即使隐藏了扩展程序,如何才能使查询字符串正常工作?

1 个答案:

答案 0 :(得分:2)

    void Application_BeginRequest(object sender, EventArgs e)
{
//Removes requirement of having ".aspx" in the URL
    Uri uri = this.Request.Url;
    string path = uri.AbsolutePath;
    if (!string.IsNullOrEmpty(path) && path != "/" && path.IndexOf('.') == -1)
    {
        path = path + ".aspx";
        string query = uri.Query;
          string url = path + query;
          Context.RewritePath(url);
    }
 }   

试试上面的代码。正如VDWWD所提到的,最好的方法是使用IIS URL重写器。