سؤال

أحاول خلق التقاط كل الطريق إلى المسار عندما تابعا السلسلة في URL.وهو affilite رمز يتسم x تليها int, و سوف تظهر فقط في نهاية URL (ولكن قبل سلسلة الاستعلام).

الفكرة هي أنني استخراج معرف التابعة لها ، والقيام ببعض الأشجار ، ثم القيام 301 إلى نفس الطلب دون معرف التابعة لها.

على سبيل المثال:

http://www.domain.com/x32
http://www.domain.com/x32/
http://www.domain.com/path/to/something/x32
http://www.domain.com/x32?query=string
http://www.domain.com/x32/?query=string
http://www.domain.com/path/to/something/x32?query=string
http://www.domain.com/path/to/something/x32/?query=string

لدي هذا الطريق

routes.Add(new Route("{url}/x{affiliateExternalId}", new MvcRouteHandler())
{
     Defaults = new RouteValueDictionary(
      new { controller = "Home", action = "LogCookieAndRedirect" }
     ),
     Constraints = new RouteValueDictionary(new { affiliateExternalId = @"\d{1,6}" })
});

والتي مباريات فقط

http://www.domain.com/path/x32
http://www.domain.com/path/x32/

ماذا يجب أن تفعل كل شيء المباراة وتمرير سلسلة الاستعلام إلى تحكم ؟ هناك * مشغل وأظن أن استخدام, ولكن لا أستطيع أن أفعل ما أريد.

هل كانت مفيدة؟

المحلول

و{*url} سوف يتطابق مع مسار بأكمله بدلا من جزء واحد فقط. ومع ذلك، لأنه يتطابق مع مسار كله، لا يمكنك ثم مطابقة ID التابعة لها على النهاية. والطريق تطابق كل طلب. يمكنك الحصول على حول ذلك بإضافة القيد الطريق للتأكد من أن url له ID التابعة لها في النهاية:

routes.MapRoute(
    "WithAffiliate",
    "{*url}",
    new { controller="Home", action="LogCookieAndRedirect" },
    new { url = @"/x[0-9]+$" }
 );

والعمل الخاص بك سوف تحتاج بعد ذلك إلى تحليل ID التابعة لها من المعلمة url نفسها. إذا كان لديك خيار لتعديل هيكل URL، سيكون من الممكن لتتناسب مع ID لو كانت في بداية الطريق:

routes.MapRoute(
    "WithAffiliate",
    "x{affiliateExternalId}/{*url}",
    new { controller="Home", action="LogCookieAndRedirect" }
 );

نصائح أخرى

إذا كنت تفعل ذلك, وأود أن تجعل واحدة من القيم في سلسلة الاستعلام.

على سبيل المثال:

http//www.domain.com/path/to/something?affiliate=X32&query=string

المشكلة هي أن معرف التابعة لها هو اختياري.إذا كان يمكنك وضعه في المسار سوف تغيير هيكل المسار استنادا إلى ما إذا كان أو لم يكن معرف التابعة لها موجودة ، لذلك عليك أن تفعل كل واحد من المسارات الخاصة بك مرتين (مرة واحدة مع معرف التابعة لها ، ومرة واحدة بدون).

هل يمكن أن يكون هذا فقط التقاط كل الطريق إذا كان لديك سوى طريق واحد محدد. ولكن إذا كان لديك طرق متعددة، ثم وأنت تسير لدينا لإضافة تلك المعلمة {affiliateExternalId} لجميع الطرق (إلا إذا أنا شيء مفقود).

روبرت هارفي الصورة <لأ href = "https://stackoverflow.com/questions/ 1618896 / آسيا والمحيط الهادئ، صافي MVC-توجيه-كيف افعل انا مباراة دون وبكل رابط / 1618910 # 1618910 "> اقتراح .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top