NancyFX التقط كل الطريق
-
12-12-2019 - |
سؤال
هل تدعم NancyFX ASP.NET MVC مثل مسار "Catch All"؟أحتاج إلى واحد يتطابق بشكل أساسي مع كل عنوان URL.يعد هذا مفيدًا جدًا لإنشاء تطبيقات الصفحة الواحدة.
هل هذا ممكن؟
المحلول
نعم، باستخدام Regex giveacodicetagpre.
لكنك لا تحتاجها حقا لبناء تطبيق صفحة واحدة مع Nancyfx - يمكنك فقط استخدام الحصول على جميع منطق التوجيه الخاص بك ولا يزال لديك تطبيق صفحة واحدة.
نصائح أخرى
Tested in Nancy version 0.23.2
Get[@"/(.*)"]
لم يعمل بالنسبة لي كطريق شامل.الطرق "/", "/فو/بار", ، ولن يتم التقاط الطرق الأطول.يبدو أنه لا يوجد مجال للالتفاف حول الحاجة إلى تحديد أ Get["/"]
الطريق لعنوان URL الجذر.لا يبدو أن هناك أي شيء آخر يمسك به (حاول Get["{uri*}"]
).إليك كيف انتهيت من تحديد مساراتي (ضع في اعتبارك أنني أفعل ذلك من أجل تطبيق Angular):
Get["/views/{uri*}"] = _ => { return "A partial view..."; };
Get["/"] =
Get["/{uri*}"] = _ =>
{
var uri = (string)_.uri;// The captured route
// If you're using OWIN, you can also get a reference to the captured route with:
var environment = this.Context.GetOwinEnvironment();// GetOwinEnvironment is in the 'Nancy.Owin' namespace
var requestPath = (string)environment["owin.RequestPath"];
return View["views/defaultLayout.html"];
};
من المهم أن نفهم تسجيل النمط.يتم ترجيح أنماط المسار، إذا تطابق مساران مع نفس مقطع عنوان URL، فستفوز النتيجة الأعلى.يتم ترجيح نمط الالتقاط 0
وعلى الرغم من /views/{uri*}
نمط المسار هو أيضًا نمط شامل، فهو يبدأ بالحرف، وهو مرجح 10000
, ، لذلك سوف يفوز على جميع الطرق التي تبدأ بـ /الآراء.
إليك المزيد من المعلومات حول الوصول إلى متغيرات بيئة أوين.علماً أنه تم القبض عليه uri
متغير و requestPath
سوف تكون مختلفة قليلا.ال requestPath
سيبدأ ب /
في حين أن uri
المتغير لن.وأيضًا، إذا كان نمط المسار المطابق Get["/"]
, uri
سوف يكون null
و requestPath
سوف يكون "/"
.
ال الآراء سيؤدي المسار إلى إرجاع ملف html جزئي، استنادًا إلى مسار عنوان url، وستعيد جميع المسارات الأخرى صفحة التخطيط الافتراضية التي ستعمل على تشغيل SPA.
إجابة محدثة لم يعمل حل Synhershko.حاول: giveacodicetagpre.
سيؤدي ذلك إلى التقاط جميع المسارات باستثناء صفحة الفهرس.لست متأكدا مما إذا كان هذا سيعمل في سياق الزاوي، ولكن هذا يعمل من أجلي عند محاولة الاختراق جنبا إلى جنب خادم بسيط مع معالج واحد فقط.
الإجابة المقدمة من ssynhershko لا يعمل بالنسبة لي.لا يتوافق / المستخدمين / 2 أو أي مسار آخر يحتوي على المزيد من القطرات.
أدناه الرمز يعمل على جهازي؛): giveacodicetagpre.
حلاي ليس مثاليا، لأنه لا يتطابق مع كل شيء .كررت أكبر عدد ممكن من '/(.*)' كما في أطول طريق الزاوي.