it-swarm.com.de

Es wurde kein Typ gefunden, der mit dem Controller 'User' übereinstimmt.

Ich versuche, zu einer Seite zu navigieren, deren URL das folgende Format hat: Localhost: xxxxx/User/{id}/VerifyEmail? SecretKey = xxxxxxxxxxxxxxx

Ich habe eine neue Route in die RouteConfig.cs-Datei eingefügt, und mein RouteConfig.cs sieht folgendermaßen aus:

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 }
        );
    }
}

Wenn ich zu dieser URL navigiere, bekomme ich leider diese Seite:

<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>

und hier ist mein 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();
    }
}

Bitte sag mir, was mache ich falsch?

45
elad

In meinem Fall, nachdem ich fast 30 Minuten damit verbracht hatte, das Problem zu beheben, fand ich heraus, was es verursacht hat:

Meine in WebApiConfig.cs definierte Route war wie folgt:

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

und es sollte so sein:

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

wie Sie sehen, hat dies die in RouteConfig.cs definierte Standardroute beeinträchtigt.

41

In meinem Fall wurde der Controller definiert als:

    public class DocumentAPI : ApiController
    {
    }

Ändern Sie es auf die folgende Arbeit!

    public class DocumentAPIController : ApiController
    {
    }

Der Klassenname muss mit enden Regler!

Edit: Wie @Corey Alix vorgeschlagen hat, stellen Sie bitte sicher, dass der Controller einen public access-Modifikator hat. Nicht öffentliche Controller werden vom Routenhandler ignoriert!

55
Raghu

Eine andere Lösung könnte darin bestehen, die Klassenberechtigung der Controller auf public zu setzen.

setze das:

class DocumentAPIController : ApiController
{
}

zu:

public class DocumentAPIController : ApiController
{
}
18
ElRaph

In meinem Fall habe ich die Web-API verwendet und ich hatte nicht die public für meine Controller-Klasse definiert.

Dinge, die auf Web-API überprüft werden sollten:

  • Controller-Klasse wird als public deklariert
  • Controller-Klasse implementiert ApiController : ApiController
  • Name der Controller-Klasse muss mit Controller enden
  • Stellen Sie sicher, dass Ihre URL das Präfix /api/ hat. z.B. 'Host: Port/API/{Controller}/{Aktionsmethode}'
15
Zapnologica

In meinem Fall wollte ich einen Web-API-Controller erstellen, aber aufgrund von Unaufmerksamkeit wurde mein Controller von Controller anstelle von ApiController geerbt.

6
Sergey_T

In meinem Fall wurde das Routing definiert als:

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

während Controller muss in der Konfiguration abgelegt werden:

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

In meinem Fall sah ich das, weil ich zwei Controller mit demselben Namen hatte:

Eine für die Abwicklung von Kundenaufträgen mit dem Namen CustomersController und die andere für das Abrufen von Ereignissen auch mit dem Namen CustomersController.

Ich hatte die Vervielfältigung verpasst, ich habe die Ereignisse in CustomerEventsController umbenannt und es hat perfekt funktioniert

3
RobertH

Ich habe auch das gleiche Problem gehabt. Ich habe viel gesucht und festgestellt, dass die Berechtigung auf Klassenebene erforderlich ist. Standardmäßig ist die Berechtigungsstufe der Klasse intern, sodass ich dachte, dass sie die Programmausführung nicht beeinflusst. Aber es wurde tatsächlich betroffen, Sie sollten Ihre Klasse als öffentlich einschränken, damit Sie kein Problem haben. 

Und einer mehr. Wenn es sich um ein Webapi-Projekt handelt, überschreibt Ihre Datei webapirouteconfig die Einstellungen der Datei routeconfig.cs. Aktualisieren Sie daher auch die Datei webapi routeconfig, um ordnungsgemäß zu funktionieren.

1
Gopi P

Erlebte dieses ähnliche Problem. Wir haben es mit mehreren APIs zu tun, und wir haben die falsche Portnummer gefunden und diesen Fehler erhalten. Dauerte uns ewig zu realisieren. Vergewissern Sie sich, dass der Port der API, den Sie treffen, der richtige Port ist.

1
Erkin Djindjiev

In meiner Lösung habe ich ein Projekt namens "P420" und in einem anderen Projekt hatte ich einen P420Controller.

Wenn .NET den Controller-Namen zum Suchen der Route findet, Konflikt mit einem anderen Projekt, das als Bibliothek verwendet wird.

Ich hoffe es hilft.

1
Andre Mesquita

Das gleiche Problem konfrontiert. Alle Antworten wurden hier überprüft, aber mein Problem lag im Namespace Routing-Attribute sind in System.Web.Mvc und in System.Web.Http vorhanden. Meine Verwendung beinhaltete den Mvc-Namespace und das war der Grund. Für Webapi müssen Sie System.Net.Http verwenden.

0
Leonid Ershov

Als ich in meiner Lösung meinen neuen Controller zum Projekt hinzufügte, wurde ich vom Assistenten gefragt, ob ich den Speicherort des Controllers im Ordner App_Code festlegen möchte. Der Assistent hat mich gewarnt, wenn ich ihn nicht im Ordner finde Im App_Code-Ordner wird der Controller-Typ nicht gefunden. Aber ich habe die ganze Warnung nicht gelesen, weil ich die Datei an einem anderen Ort finden wollte ..., deshalb hat es für mich nicht funktioniert.

Nachdem ich einen neuen Controller hinzugefügt und ihn standardmäßig im App_Code haben ließ, funktionierte alles.

0
Bene

In meinem Fall handelte es sich um ein überaggressives Caching durch den WebHostHttpControllerTypeResolver.

Fix:

  1. Löschen Sie alle Dateien (oder in meinem Fall nur alle Dateien mit dem Namen "MS-ApiControllerTypeCache.xml") unter diesem Pfad:

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

  2. Starten Sie den App-Pool neu

gutschrift: https://sitecore.stackexchange.com/questions/9897/webapi-controllers-not-being-found-in-sitecore-8-2

0
sitecorepm

In meinem Fall rief ich die APi gerne an

http: // locahost: 56159/api/loginDataController/GetLoginData

während es so sein sollte 

http: // locahost: 56159/api/loginData/GetLoginData

Controller wurde von der URL entfernt und es begann zu arbeiten ...

Frieden!

0
Azhar