فشل التقاط كل الطريق للعثور على الطريق مع ويبابي 2 أبيكونترولر

StackOverflow https://stackoverflow.com//questions/21044717

سؤال

أنا إنشاء خدمة ويبابي 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 });
}

السبب في أنه يعمل من وحدة تحكم هو أن مابروت هو التنسيق الصحيح لتوجيه وحدة تحكم مفك ، في حين تم تصميم مابروت لوحدات تحكم أبي.

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