0

.NET4でのURL書き換えの最良の解決策は何ですか。次のようなURLを書き換える簡単な解決策を探しています。

「myurl.com/ApplicationName/Kohls」を「myurl.com/ApplicationName/index.html?store=Kohls」のように変更して、クエリ文字列を介して変数「Kohls」にアクセスできるようにします。

私は現在Global.asaxを使用しており、上記の場合は機能していますが、ユーザーがmyurl.com/Applicationと入力し、Applicationの後に「/」などがない場合に問題が発生します。

私は現在これを持っています:

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        String CurrentURLPath = Request.Path.ToUpper();

        Match nothingAfterRoot = Regex.Match(CurrentURLPath, @"/ApplicationName(/)?$", RegexOptions.IgnoreCase);
        if (nothingAfterRoot.Success)
        {
            HttpContext myContext = HttpContext.Current;
            myContext.RewritePath("/ApplicationName/Default.aspx?store=ABC");
        }
        else
        {
            Match match = Regex.Match(CurrentURLPath, @"/ApplicationName(/)?(\w)*$", RegexOptions.IgnoreCase);
            if (match.Success)
            {
                CurrentURLPath = CurrentURLPath.Trim('/');
                String store= CurrentURLPath.Split("ApplicationName/".ToCharArray())[1];
                HttpContext myContext = HttpContext.Current;
                myContext.RewritePath(String.Format("/ApplicationName/Default.aspx?store={0}", store));
            }
        }
    }
4

3 に答える 3

2

.NET 4 での URL 書き換えの最適なソリューションは何ですか?

オプションがある場合は、MVC フレームワークを使用してください。URL 書き換えがデフォルトです。

従来の asp.net サイトの場合、web.config ファイルに対して次のように UrlRewritingNet.UrlRewriter.dll を使用します。

<configSections>
    <section name="urlrewritingnet" restartOnExternalChanges="true" 
        requirePermission="false" type="UrlRewritingNet.Configuration.UrlRewriteSection, 
        UrlRewritingNet.UrlRewriter" />
</configSections>

<system.web>
    <urlrewritingnet rewriteOnlyVirtualUrls="true" contextItemsPrefix="QueryString" 
         defaultPage="default.aspx" defaultProvider="RegEx"       
         xmlns="http://www.urlrewriting.net/schemas/config/2006/07">
        <rewrites>
          <add name="ArticleUrlRewrite" virtualUrl="^~/a-(.*)-([\w-]*)\.aspx" 
               rewriteUrlParameter="ExcludeFromClientQueryString" 
               destinationUrl="~/article.aspx?id=$1" ignoreCase="true" />
        </rewrites>
    </urlrewritingnet>
</system.web>
于 2012-07-19T22:07:54.203 に答える
1

ShortURL-dotnet を使用して、bit.ly/XXXX のような URL を www.mysite.com/index.htm に書き換えることができます

デフォルトのエラー ページをリダイレクト ファイルに変更し、値が存在するかどうかに応じて、実際の URL にリダイレクトします。

このソリューションに興味がある場合は、 http://sourceforge.net/projects/shorturl-dotnet/で詳細を確認できます。

using System;
using System.Web;

public partial class Redirection : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ShortUrl.Container oShortUrl;

        if (ShortUrl.Utils.HasValue(Request.QueryString["page"].ToString())) // checks in case ISAPIRewrite is being used
        {
            oShortUrl = ShortUrl.Utils.RetrieveUrlFromDatabase(Request.QueryString["page"].ToString());
        }
        else // using IIS Custom Errors
        {
            oShortUrl = ShortUrl.Utils.RetrieveUrlFromDatabase(ShortUrl.Utils.InternalShortUrl(Request.Url.ToString()));
        }

        if (oShortUrl.RealUrl != null)
        {
            Response.Redirect(oShortUrl.RealUrl);
        }
        else
        {
            Response.Redirect("MissingUrl.aspx");
        }
    }
}
于 2012-07-19T22:17:42.497 に答える
0

上記のように、MVCは、オプションである場合、優れたアプローチです。

IIS 7を実行している場合は、URL書き換えモジュールを利用できます。

http://learn.iis.net/page.aspx/460/using-the-url-rewrite-module/ および http://www.microsoft.com/en-us/download/details.aspx?id=7435

IIS6を実行している場合は、上記のようにurlrewritingnetを使用するか、または私が好むようにIIRFを使用できます。

http://iirf.codeplex.com/

mod-rewriteの類似性と正規表現ベースのルールにより、非常に強力になります

于 2012-07-19T22:53:04.167 に答える