it-swarm.dev

لم يتم العثور على أي نوع يطابق جهاز التحكم المسمى "المستخدم"

أحاول الانتقال إلى صفحة يكون عنوان URL بها بالتنسيق التالي: localhost: xxxxx/User/{id}/VerifyEmail؟ secretKey = xxxxxxxxxxxxxxx

لقد أضفت طريقًا جديدًا في RouteConfig.cs ملف وهكذا بلدي RouteConfig.cs يشبه هذا:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "VerifyEmail",
            url: "User/{id}/VerifyEmail",
            defaults: new { controller = "User", action = "VerifyEmail" }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index",
                id = UrlParameter.Optional }
        );
    }
}

لسوء الحظ ، عند محاولة الانتقال إلى عنوان URL هذا ، أحصل على هذه الصفحة:

<Error>
    <Message>
        No HTTP resource was found that matches the request URI 'http://localhost:52684/User/f2acc4d0-2e03-4d72-99b6-9b9b85bd661a/VerifyEmail?secretKey=e9bf3924-681c-4afc-a8b0-3fd58eba93fe'.
    </Message>
    <MessageDetail>
        No type was found that matches the controller named 'User'.
    </MessageDetail>
</Error>

وهنا هو UserController الخاص بي:

public class UserController : Controller
{

    // GET      /User/{id}/VerifyEmail
    [HttpGet]
    public ActionResult VerifyEmail(string id, string secretKey)
    {
        try
        {
            User user = UsersBL.Instance.Verify(id, secretKey);
            //logger.Debug(String.Format("User %s just signed-in in by email.",
                user.DebugDescription()));
        }
        catch (Exception e)
        {
            throw new Exception("Failed", e);
        }
        return View();
    }
}

من فضلك قل لي ماذا أفعل الخطأ؟

47
elad

في حالتي بعد قضاء 30 دقيقة تقريبًا في محاولة حل المشكلة ، وجدت سبب ذلك:

طريقي محدد في WebApiConfig.cs كان مثل هذا:

config.Routes.MapHttpRoute(
    name: "ControllersApi",
    routeTemplate: "{controller}/{action}"
);

ويجب أن يكون مثل هذا:

config.Routes.MapHttpRoute(
    name: "ControllersApi",
     routeTemplate: "api/{controller}/{action}/{id}",
        defaults: new { id = RouteParameter.Optional }
);

كما تراه كان يتداخل مع المسار القياسي المحدد في RouteConfig.cs.

44
Leniel Maccaferri

في حالتي ، تم تعريف وحدة التحكم على النحو التالي:

    public class DocumentAPI : ApiController
    {
    }

تغييره إلى ما يلي عملت!

    public class DocumentAPIController : ApiController
    {
    }

اسم الفصل يجب أن ينتهي بـ مراقب!

تحرير: كما اقترحCorey Alix ، يرجى التأكد من أن وحدة التحكم لديها عام معدل الوصول ؛ يتم تجاهل وحدات التحكم غير العامة بواسطة معالج التوجيه!

59
Raghu

يمكن أن يكون حل آخر لتعيين إذن فئة وحدات التحكم للجمهور.

اضبط هذا:

class DocumentAPIController : ApiController
{
}

إلى:

public class DocumentAPIController : ApiController
{
}
20
ElRaph

في حالتي كنت أستخدم Web API ولم يكن لدي public المعرّفة لفئة وحدة التحكم الخاصة بي.

أشياء يجب البحث عنها لواجهة برمجة تطبيقات الويب:

  • يتم تعريف Class Controller كـ public
  • تطبق فئة التحكم ApiController : ApiController
  • يجب أن ينتهي اسم فئة وحدة التحكم بـ Controller
  • تحقق من أن عنوان url الخاص بك يحتوي على /api/ اختصار. على سبيل المثال. 'المضيف: منفذ/المعهد/{تحكم}/{actionMethod}
18
Zapnologica

في حالتي كنت أرغب في إنشاء وحدة تحكم Web API ، ولكن بسبب عدم الانتباه ، تم توريث وحدة التحكم الخاصة بي من وحدة التحكم بدلاً من ApiController.

6
Sergey_T

في حالتي ، تم تعريف التوجيه بأنه:

 config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{*catchall}",
            defaults: new { controller = "WarehouseController" }

بينما المراقب يحتاج إلى إسقاط في التكوين:

 config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{*catchall}",
            defaults: new { controller = "Warehouse" }
4
Juliusz

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

و واحدة اخرى. إذا كان مشروع webapi ، فسيقوم ملف webapirouteconfig بالكتابة فوق إعدادات ملف routeconfig.cs. لذا قم بتحديث ملف webeci routeconfig للعمل بشكل صحيح.

1
Gopi P

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

1
Erkin Djindjiev

في الحل الخاص بي ، لدي مشروع يسمى "P420" وفي مشروع آخر كان لديّ P420Controller.

عندما يقطع .NET اسم وحدة التحكم للعثور على الطريق ، يتعارض مع مشروع آخر ، يستخدم كمكتبة فيه.

آمل أن يساعد.

1
Andre Mesquita

واجهت نفس المشكلة. فحص جميع الإجابات هنا ولكن مشكلتي كانت في مساحة الاسم. توجد سمات التوجيه في System.Web.Mvc وفي System.Web.Http. وشملت استخدامات بلدي مساحة اسم Mvc وكان السبب. ل webapi تحتاج إلى استخدام System.Net.Http.

0
Leonid Ershov

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

بعد إضافة وحدة تحكم جديدة والسماح لها أن تكون في App_Code بشكل افتراضي ، كل شيء يعمل.

0
Bene

في حالتي ، كانت حالة التخزين المؤقت المفرط من جانب WebHostHttpControllerTypeResolver.

الإصلاح:

  1. احذف جميع الملفات (أو في حالتي أي ملفات باسم "MS-ApiControllerTypeCache.xml") ضمن هذا المسار:

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root

  2. أعد تشغيل تجمع التطبيقات

الائتمان: https://sitecore.stackexchange.com/questions/9897/webapi-controllers-not-being-found-in-sitecore-8-2

0
sitecorepm

في حالتي كنت أتصل بـ API مثل

HTTP: // locahost: 56159/المعهد/loginDataController/GetLoginData

بينما يجب أن يكون مثل

HTTP: // locahost: 56159/المعهد/loginData/GetLoginData

تمت إزالة Controller من URL وبدأ العمل ...

سلام!

0
Azhar