1

次のように渡されたクエリを使用する簡単で汚い方法はありますか:

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

以前に PHP で行ったことがありますが、これはページで行う必要があります (この例では)。

-- aspx ページとコード ビハインドにしかアクセスできず、asp.net 2 で作業する必要があります(3.5 を使用していればよかったのに) 。

4

5 に答える 5

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>
于 2009-01-20T15:03:14.973 に答える
1

いくつかのオプションがありますが、すべてのオプションで web.config にアクセスし、IIS を変更してすべてのファイル拡張子を dotNet ISAPI dll にマップする必要があります。

  1. MVC を使用します (stackoverflow のように、URL に注意してください)
  2. asp.net ルーティングを使用する (3.5 の新機能)
  3. 独自の http ハンドラーを作成するMicrosoft からの大規模なガイドはこちら
  4. 面倒な認証や画像パスの問題を回避するなど、ほぼすべてを完璧に行う優れたurlrewriting.netを使用してください。

個人的には urlrewriting.net を使用して良い結果を得ました。

あなたはコードビハインドとページ以外にはアクセスできないと述べているので、私が考えることができる唯一のことは、実際にそれらのディレクトリを作成し(アクセスできる場合)、値を渡すserver.transferページを使用することです上のフォルダー内の実際のページに移動します。面倒ですが、他のものにアクセスできない場合、選択肢は限られます。

于 2009-01-20T15:13:11.927 に答える
1

.NET 3.5 SP1 で追加された ASP.NET System.Web.Routing 名前空間を調べてみてください。

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 拡張子も削除できます。

于 2009-01-20T14:43:09.977 に答える
1

これには、カスタム HTTP ハンドラの作成が含まれます。

これをチェック

于 2009-01-20T14:43:27.103 に答える
1

.aspx 内からパスを読み取るだけの場合:

Request.ServerVariables["PATH_INFO"]

明確にするために:

彼は aspx (+ コードビハインド) 自体にしかアクセスできないため、クエリがどのようになっているかを知っている必要がありますが、形式が原因で Request.QueryString には含まれていません。したがって、唯一の方法は Request.ServerVariables["PATH_INFO"] (Request.RawUrl) です

于 2009-01-20T14:48:31.620 に答える