2

重要: この質問は実際には ASP.NET に関する質問ではありません。URL について何か知っている人なら誰でも答えることができます。たまたま ASP.NET ルーティングを使用していたので、その詳細を含めました。

一言で言えば、私の質問は次のとおりです。

「私のサイトの特定の場所に到達するために外部関係者に与えることができる、将来の証明となる URL 形式を設計する必要があります。[これらの 'REST' URL を作成するのは初めてです]。」


マーケティング キャンペーンを追跡するためにサード パーティに提供される ASP.NET ルーティング URL が必要です。これは基本的に、ホームページ、特別なコンテスト、または特定の製品など、当社サイトの特定のページにユーザーをリダイレクトする「ゲートウェイ」URL です。

リファラーを取得しようとすることに加えて、partnerId、キャンペーン番号、および場合によってはその他のパラメーターを受け取る必要があります。これを行うためのルートを提供したいのですが、外部で使用すると明らかに簡単に変更できないため、最初に正しく取得したいと考えています。

このようなものはどのように見えますか?

routes.MapRoute(
   "3rd-party-campaign-route",
   "campaign/{destination}/{partnerid}/{campaignid}/{custom}",
   new
   {
       controller = "Campaign",
       action = "Redirect",
       custom = (string)null // optional so we need to set it null 
   }
); 

キャンペーン: 実際のリンクに「キャンペーン」という単語を含めたくない場合があります。ユーザーは URL バーに表示されるためです。これを「c」のような不可解なものに変更するかもしれません。

destination : リンク先のサイトのどのページにユーザーが移動するかを指定します。たとえば、ユーザーを製品ページに誘導する PR。

partnerid : 割り当てた会社の ID - スタック オーバーフローの SO など。

Campaignid : 123 などのキャンペーン ID - 各パートナーに固有「キャンペーンを作成する」ための Web サイトを提供するよりも、サードパーティの会社がキャンペーン ID を自分で管理できる方がよいと思います。ただし、これについてはまだ完全にはわかりません。

custom : カスタム データ (オプション)。既存の URL を壊すことなく、さらにカスタム データ パラメータを追加できます

注: 「目的地」がある理由は、キャンペーン ID がクライアントによって決定されるため、そのキャンペーンの目的地がどこにあるかも伝える必要があるためです。または、キャンペーンを「登録」することもできます。これは、人々がランダムなキャンペーン ID を入力するのを避けるためのより良い解決策かもしれませんが、私はそれについてあまり心配していませんし、このシステムにより柔軟性が増すと思います.

さらに、おそらくどの画像が私たちへのリンクに使用されたかを知りたいと考えています (これにより、どのバナーが最も効果的かを追跡できます)。これは、カスタム データ フィールドではなく、新しいキャンペーン ID の候補だと思いますが、よくわかりません。

現在、 http://example.com?cid=123などの非常に原始的な URL を使用しています。この場合、キャンペーン ID を第三者に発行する必要があり、あまり柔軟なシステムではありません。新しいクライアントのために新しいシステムにすぐに移行したい。

このシステムの将来の証明について何か考えはありますか? 何を見逃したのでしょうか?いつでも新しい形式を追加できることはわかっていますが、この形式が良いアイデアである場合は、できるだけこの形式を使用したいと考えています。

4

9 に答える 9

3

最近、URLの書き換えが少し手に負えなくなってきていると思います。すべてがURLに属するわけではありません。結局のところ、URLは、検索、検出、または操作できるリソースを記述することになっています。少なくとも、上記のパートナーIDとカスタムフィールドはリソースの一部ではないように思われます。

言うまでもなく、ある時点で、複数のキャンペーンにわたってパートナーIDを実際に一定に保ちたいと考えています。つまり、パートナーIDは、訪問する必要のある特定の場所に直交しています。これらをパラメータとして保持すると、パートナーがWebサイト上の複数のリソースに均一にアクセスできるようになりますが、それでも確実に識別できるため、キャンペーンへの参加を追跡できます。

于 2009-02-10T04:23:14.770 に答える
1

すべての基地をカバーしたようです。私が持っている唯一の提案は変更することです

{custom}

{*custom}

そうすれば、さらにパラメーターを受け入れる必要がある場合でも、古いURLが404を取得する可能性を冒す必要はありません。次に例を示します。

次のようなURLがある場合:

キャンペーン/PR/ SO / 123

そして、将来、4番目と5番目のパラメーターを受け入れることを決定します。

キャンペーン/PR/ SO / 123 / blah / foo

{* custom}でワイルドカード文字を使用しているため、最初のURLは引き続き有効です。「blah/foo」は、文字列としてアクションに渡されます。これらの追加の2つのパラメーターを取得するには、アクションのカスタム引数を「/」で分割するだけです。それらが存在せず、すでに実際に使用されているURLを完全に破壊することなく、キャンペーンURLで受信できる情報の量を正常に変更した場合は、わかりやすいエラー処理を追加します。

于 2009-01-31T16:13:24.733 に答える
1

SOが質問するのと同じようにそれを行うことを検討すると思います。

"campaign/{campaign-id}/friendly-name-of-campaign"

キャンペーンの作成時に、必要なすべてのデータを自動生成された ID に関連付けるマッピングをデータベースに作成します。フレンドリ名は、基本的にユーザーが SO に質問するのと同じ方法で割り当てることができますが、要件を満たし、既存のキャンペーン名とは異なることを確認する承認プロセスを持つこともできます。追跡会社は ID で追跡でき、簡単なルックアップで関連データと関連付けることができます。

于 2009-02-10T02:44:18.593 に答える
1

ルートの代わりに URL エンコードされた変数を使用しないのはなぜですか? それらははるかに柔軟です。100% の後方互換性を維持しながら、将来的に新しい機能を追加できます。確かに、手動で入力するのは少し面倒ですが、これらのパラメーターがすべてある場合は、ピクニックではありません。

http://mysite.com/page?campaign=1&dest=products&pid=15&cid=25

私にとって、これは実際に何が起こっているかをよりよく示しています。パスを使用すると、リソースがその場所に存在することを意味します。しかし実際には、Web サービスにさまざまなパラメーターを提供しているだけであり、このモデルはそれをより明確に捉えています。また、将来的には、より多くのパラメーターを簡単に追加できます。パラメータが欠落している場合は、何も台無しにすることなくデフォルトのパラメータにすることもできます。

ASP のコードはよくわかりませんが、簡単に実装できるはずです。

于 2009-02-09T17:39:43.490 に答える
0

http://mysite.com/gatewayという URL を作成します。

HTML フォームを返し、パートナーにフォームに記入して POST するように伝えます。フォームの値に基づいてリダイレクトします。

GET および POST を実行するための JavaScript をパートナーに簡単に提供できます。些細なはずです。

于 2009-02-10T18:13:37.933 に答える
0

あなたが持っているものはあなたのニーズにぴったりです。ここの他の投稿には良い点があります。しかし、あなたには合わないかもしれません。リンクの将来を証明するために考慮できることの 1 つは、そこにバージョン番号を入れることです。

"campaign/{version}/{destination}/{partnerid}/{campaignid}/{custom}"

このようにして、フォーマットを完全に変更することにした場合、バージョンを 2.0 (またはその他のもの) に上げても、入ってくる古いリンクを追跡できます。

于 2009-02-09T13:31:37.300 に答える
0

私はするだろう

/c/{destination}/{partnerid}/{campaignid}/?customvar=s

最初のパラメータの階層について考える必要があります。すでに十分に管理されています。階層パス セグメントがある場合にのみ使用する必要があります。

あなたの説明から、destination は最も広いパラメーターのようで、partnerid は destination でのみ機能し、campaingid はパートナーに固有です。

カスタム パラメーターを本当に追加する必要がある場合は、クエリ変数を使用します (REST では禁止されていません)。これらは階層の一部ではないためです。

また、ここで RESTful になりすぎないようにしてください。結局のところ、これはキャンペーン用であり、最終的なリソースにリダイレクトするためのものです。したがって、ここで設計する URL は、REST の観点から言えば、実際には特定のリソースではありません。

于 2009-02-10T16:15:24.877 に答える