备用查询字符串C#(asp.net)

时间:2009-01-20 14:33:17

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

使用如下传递的查询有一种快速而肮脏的方式:

domain.com/mypage.aspx/product/toycar/

我以前在PHP中完成过,但这需要在页面中完成(在本例中)。

- 我只能访问后面的aspx页面和代码,并且必须在asp.net 2 中工作(我希望我使用的是3.5)

5 个答案:

答案 0 :(得分:2)

快速而肮脏:

public class ModuleRewriter : IHttpModule
{
    public void Init(HttpApplication application)
    {
        application.BeginRequest += (new EventHandler(this.Application_BeginRequest));
    }

    private void Application_BeginRequest(Object source, EventArgs e)
    {
        // The url will look like: http://domain.com/mypage.aspx/product/toycar/ 
        // The module will rewrite it to: http://domain.com/mypage.aspx?product=toycar

        HttpApplication application = source as HttpApplication;
        string[] urlInfo = application.Request.RawUrl.ToString().Split('/');
        if (urlInfo.Length > 2)
        {
            string page = urlInfo[urlInfo.Length - 3];
            string action = urlInfo[urlInfo.Length - 2];
            string id = urlInfo[urlInfo.Length - 1];
            if (string.IsNullOrEmpty(page))
            {
                page = "default.aspx";
            }
            application.Server.Transfer(string.Format(
                "~/{0}?{1}={2}", page, action, id));
        }
    }

    public void Dispose()
    {
    }
}

的web.config:

<httpModules>
    <add name="ModuleRewriter" type="ModuleRewriter, MyWebApplication"/>
</httpModules>

和测试页面:

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <%= Request["product"] %>    
    </div>
    </form>
</body>
</html>

答案 1 :(得分:1)

您可能希望查看ASP.NET System.Web.Routing命名空间,它是在.NET 3.5 SP1中添加的,我相信:

http://blogs.msdn.com/mikeormond/archive/2008/05/14/using-asp-net-routing-independent-of-mvc.aspx

http://msdn.microsoft.com/en-us/library/system.web.routing.aspx

你也可以摆脱.aspx扩展名。

答案 2 :(得分:1)

这将涉及制作自定义HTTP处理程序。

检查this

答案 3 :(得分:1)

如果您只想阅读.aspx中的路径:

Request.ServerVariables [ “PATH_INFO”]

澄清:

他只能访问aspx(+ codebehind)本身,因此他必须知道查询是如何进行的,但由于格式的原因,它不在Request.QueryString中。那么唯一的方法就是Request.ServerVariables [“PATH_INFO”](Request.RawUrl)

答案 4 :(得分:1)

您有几个选项,但所有这些选项都需要访问web.config并更改IIS以将所有文件扩展名映射到dotNet ISAPI dll:

  1. 使用MVC(就像stackoverflow一样, 注意网址)
  2. 使用asp.net路由(3.5中的新功能)
  3. 编写自己的http处理程序Massive guide from Microsoft here
  4. 使用优秀的urlrewriting.net,它可以完美地解决所有问题,包括解决一些尴尬的身份验证和图像路径问题。
  5. 我个人使用urlrewriting.net并取得了不错的成绩。

    既然你提到你除了后面的代码和页面之外什么都没有访问权限,我唯一能想到的就是创建那些dirs(如果你有权这样做)和使用server.transfer页面将值传递给上面文件夹中的实际页面。凌乱,但如果你无法访问其他东西,你的选择是有限的。