Aucune action n'a été trouvé sur le contrôleur qui correspond à la demande
Veuillez excuser mon ignorance dans ce domaine. J'ai lu beaucoup de threads et ne peut toujours pas obtenir mon routage correct.
J'ai un contrôleur produits comme ceci:
public class ProductsController : ApiController
{
[ActionName("GetListOfStudents")]
public static List<Structures.StudentInfo> GetListOfStudents(string Username, string Password)
{
List<Structures.StudentInfo> si = StudentFunctions.GetListOfStudents(Username, Password);
return si;
}
}
J'ai une console de programme de test où j'ai défini la route:
config.Routes.MapHttpRoute(
name: "ApiByAction",
routeTemplate: "api/products/GetListOfStudents",
defaults: new { controller = "products", action = "GetListOfStudents" });
Mais quand je lance l'appel
GET http://localhost:8080/api/Products/GetListOfStudents
Je reçois le message d'erreur:
MessageDetail=No action was found on the controller 'Products' that matches the name 'GetListOfStudents'.
J'ai été en tirant sur mes cheveux et ne peut pas travailler sur la bonne route devrait être.
Tout type de soins de la personne pour m'aider?
Vous ne devez jamais envoyer le mot de passe! C'est dangereux parce que eavesdropperse de le lire. Et si vous passez le long d'un lien profond, vous êtes loin de donner votre mot de passe. Voir mon comment au-dessous de la a accepté de répondre pour voir comment résoudre ce problème.
En passant le mot de passe est bon si c'est sur https. Comment pensez-vous que les formulaires de login de travail?
les formulaires de login ne passe pas le mot de passe dans l'URL, mais plutôt qu'ils affichent le mot de passe comme une partie du corps. Il y a plusieurs problèmes avec l'envoi du mot de passe dans l'URL (même sur https), y compris la tenue de l'utilisateur mot de passe dans le non garantis historique du navigateur, par inadvertance, le partage de l'utilisateur mot de passe s'ils partagent la page, et d'avoir le mot de passe sont éparpillées sur les journaux de serveur et les caches, entre autres.
Ouais j'ai été à la hâte avec ma réponse, n'a pas vraiment d'avis a été transmise dans l'URL - je viens de lire le commentaire de "ne jamais envoyer le mot de passe" et qu'il était confus. Merci de remarquer mon erreur.
En passant le mot de passe est bon si c'est sur https. Comment pensez-vous que les formulaires de login de travail?
les formulaires de login ne passe pas le mot de passe dans l'URL, mais plutôt qu'ils affichent le mot de passe comme une partie du corps. Il y a plusieurs problèmes avec l'envoi du mot de passe dans l'URL (même sur https), y compris la tenue de l'utilisateur mot de passe dans le non garantis historique du navigateur, par inadvertance, le partage de l'utilisateur mot de passe s'ils partagent la page, et d'avoir le mot de passe sont éparpillées sur les journaux de serveur et les caches, entre autres.
Ouais j'ai été à la hâte avec ma réponse, n'a pas vraiment d'avis a été transmise dans l'URL - je viens de lire le commentaire de "ne jamais envoyer le mot de passe" et qu'il était confus. Merci de remarquer mon erreur.
OriginalL'auteur Trevor Daniel | 2014-04-07
Vous devez vous connecter pour publier un commentaire.
Ok - merci pour l'aide peeps!
Ce que j'ai fait pour le faire fonctionner:
Merci à tous pour votre aide!
c'est mon prochain problème!!!!! - eh bien repéré. besoin de travailler sur la façon de les envoyer dans le corps, n'est-ce pas?
Après des recherches pour 1 journée, je dois avouer que le routage dans l'API Web 1.0 ASP .NET est un désordre complet. Que faire si il y a besoin de plusieurs paramètres facultatifs? Comment peut-il dire à partir d'une url comme doABC/x/y/z/...?
Ici, le problème réside dans la façon dont ils organisent la table de routage: ils utilisent les 2 différentes API de s'inscrire MVC de routage et de l'Api Web de routage, mais ils enregistrent dans le même tableau!! Qui conduit à des conflits entre les deux, surtout dans les cas comme celui-ci stackoverflow.com/questions/22401403/...
Au lieu de passer d'identification de l'utilisateur via l'URL, ce qui ne devrait pas être fait, comme l'a mentionné LB2, pensez à utiliser la Sécurité Intégrée de Windows. Ensuite, vous pouvez supprimer le nom d'utilisateur et le mot de passe des paramètres complètement et utilisez
System.Security.Principal.WindowsIdentity.GetCurrent().Name
pour obtenir de l'utilisateur authentifié dans la méthode de contrôleur. Vous pouvez ensuite, supposons que l'utilisateur est authentifié par Windows et IIS, donc il n'est pas nécessaire de transmettre le mot de passe du contrôleur.OriginalL'auteur Trevor Daniel
Lors de l'inscription globale de l'api point d'accès, vous devez dire à la config de l'itinéraire pour utiliser de la manière suivante:
Dans cet exemple vous indiquer explicitement le contrôleur, il ne devrait être que pour les "produits" programmateur, vous pouvez le rendre générique sans spécification du contrôle ou de l'action, omettez simplement les valeurs par défaut, comme ceci:
Qui devrait faire l'affaire 🙂
OriginalL'auteur Yuval Itzchakov
Votre
GetListOfStudents
action requiert deux paramètres, le nom d'utilisateur et mot de passe. Pourtant, la définition de la route ne contient ni spécification dans le template de route où les valeurs de ces paramètres doit provenir de, ni de spécification pour ces valeurs des paramètres par défaut dans ledefaults:
définition de paramètre.Donc, lors de la demande, le routage est en mesure de trouver votre contrôleur, mais il est incapable de trouver l'action qui fait appel, avec la demande et de la route de contexte qu'elle a, car il dispose d'aucune information pour le nom d'utilisateur et le mot de passe des paramètres.
OriginalL'auteur LB2
Le plus important est:
ASP.Net's mvc n'est pas seulement cherchent à agir par son nom, il va aussi vérifier la signature de la méthode, la méthode est non-statique, le nom correspond à et paramètres correspond à, l'action sera exécutée.
pour votre cas, il y a deux façons de le corriger.
une façon est de déclarer la valeur par défaut, mvc utiliser la valeur par défaut lorsque parametr pas trouvé.
la deuxième façon est d'utiliser l'override
OriginalL'auteur dexiang
J'ai eu ce problème et l'ont résolu en incluant le verbe comme une partie de l'action (c'est à dire Get:, GetThat) et la création manuelle d'itinéraires. J'ai été de tenter de créer des itinéraires à l'aide d'attributs, mais cela ne fonctionne pas. Cette DONC, la question peut être la réponse à pourquoi les attributs ne sont pas de travail, je n'ai pas eu cette redressé encore. Comme une note complémentaire pour toute autre personne ayant le même problème, lors du débogage localement, c'est à dire a été s'écraser lors de l' "aucune action n'a trouvé" xml a été retourné. Dès que j'ai arrêté et passé à Chrome, le message de détail a été retourné, et il était évident que mon contrôleur au moins a été trouvé, c'était juste une question de mise en action de travail...
OriginalL'auteur jmoreno
Si vous voulez l'appeler GetListOfStudents méthode sans paramètre, vous devez définir la valeur par défaut pour le paramètre. comme
GetListOfStudents(string Username=null, string Password=null)
Sinon, vous devez appeler la méthode avec des Paramètres.
OBTENIR http://localhost:8080/api/Products/GetListOfStudents/Username/Password
OriginalL'auteur Ahmadreza Farrokhnejad
Lors de l'envoi, encoder le mot de passe avec le codage base64.
Puis, quand vous vous apprêtez à utiliser le décoder.
Fonctionne très bien pour moi.
OriginalL'auteur dan