فشل التقاط كل الطريق للعثور على الطريق مع ويبابي 2 أبيكونترولر
-
21-12-2019 - |
سؤال
أنا إنشاء خدمة ويبابي 2 ، واحدة من الأساليب التي أريد تنفيذها يمثل هتب الحصول من كائن داخل بنية شجرة داخلية-وبالتالي فإن الطلب سيكون على غرار:
GET /values/path/path/to/object/in/tree
لذلك أود أن طريقي لتلقي"مسار/إلى/كائن/في/شجرة".
ومع ذلك ، أنا فقط الحصول على 404 عند تشغيل هذا ، ومن المثير للاهتمام أن أحصل على 404 التي هي مختلفة تبحث عن معيار إيس 404.انها بعنوان 'خطأ الخادم في' / ' التطبيق.'،في حين أن واحد لمورد غير صالح تماما بعنوان 'خطأ هتب 404.0-غير موجود'.
أنا ألعب مع القالب الافتراضي لمحاولة معرفة ما إذا كان يمكنني الحصول على هذا العمل ، وبالتالي التشابه.
لدي هذا لبلدي RouteConfig
public static void RegisterRoutes(RouteCollection routes)
{
var route = routes.MapRoute(
name: "CatchAllRoute",
url: "values/path/{*pathValue}",
defaults: new { controller = "Values", action = "GetPath" });
}
وهذا هو بلدي ValuesController
:
[System.Web.Mvc.AuthorizeAttribute]
[RoutePrefix("values")]
public class ValuesController : ApiController
{
[Route("test/{value}")]
[HttpGet]
public string Test(string value)
{
return value;
}
[HttpGet]
public string GetPath(string pathValue)
{
return pathValue;
}
}
ومن المثير للاهتمام ، إذا كنت مستمدة من Controller
بدلا من ApiController
إنه يعمل بشكل جيد ، ولكن بعد ذلك لا يعمل توجيه السمة العادي.
حاولت اتباع المنهجية في هذا المنصب (http://www.tugberkugurlu.com/archive/asp-net-web-api-catch-all-route-parameter-binding) لكنني لم أستطع الحصول عليه للعمل.
أنا متأكد من أنني أفتقد شيئا سهلا بغباء ، لكن بعد أن أمضيت بضع ساعات في ذلك ، اعتقدت أنه من الحكمة أن أسأل ما أفعله بشكل خاطئ.
شكرا
M
المحلول
توجيه واجهة برمجة تطبيقات الويب ليس هو نفسه توجيه مفك.بدلا من
route.MapRoute
حاول
public static void Register(HttpConfiguration config) {
config.MapHttpAttributeRoutes
config.Routes.MapHttpRoute(
name: "CatchAll", routeTemplate: "values/path/{*pathvalue}",
defaults: new {id = RouteParameter.Optional });
}
السبب في أنه يعمل من وحدة تحكم هو أن مابروت هو التنسيق الصحيح لتوجيه وحدة تحكم مفك ، في حين تم تصميم مابروت لوحدات تحكم أبي.