9
votes

Est-il possible d'intercepter une action de devenir un contenteur?

Je tente d'écrire un filtre qui enveloppe des données pour suivre le Spécification de l'API JSON et jusqu'à présent, je l'ai Travailler sur tous les cas où je retourne directement une actionResulte, telle que complextypejson . J'essaie de le faire fonctionner dans des situations telles que complextype où je n'ai pas besoin d'exécuter constamment la fonction json . XXX

Toutefois , à l'heure Public Override Noid OnactionExecuted (ActionExecutedContercontextercontextercontextercontext) S'exécute lorsque je navigue à ComplexType , le filtreContext.result est un résultat de contenu, que est juste une chaîne où filtercontext.result.content est simplement: xxx

est là pour que je puisse définir quelque chose pour faire complexes devient JSONRESULT plutôt que contentResult ?

Pour le contexte, voici les fichiers exacts:

TestController.cs xxx

jsonapifilter.cs xxx


4 commentaires

Pouvez-vous montrer plus de votre code? Nous fournir plus de contexte? Expliquez plus de termes à ceux qui sont inconnus avec votre API JSON?


Aucun de cela n'est spécifique à mon API JSON, mais j'ai fourni les fichiers exacts du contrôleur de filtrage et de test.


Ainsi, vous ne pouvez pas accéder à votre liste dans la méthode composeresultmodel .am I correcte?


Si vous préférez utiliser une méthode d'action pour renvoyer vos demandes asynchronisées, pourquoi ne pas utiliser le json actionResult?


3 Réponses :


3
votes

Il y a deux options:

1.Utilisez Apicontroller strong> au lieu de contrôleur fort> p>

L'Apicontroller retournera le résultat JSON et le sérialisateur par défaut est newtonsoft.json strong> (ICI) , vous pouvez donc utiliser comme celui-ci ci-dessous: p> xxx pré>

2.fraper votre réponse avec votre propre actionResResult forte> Si vous insistez à l'aide de contrôleur fort>: p>

var result  = filterContext.Response.Content.ReadAsStringAsync();


2 commentaires

Oui, ce type de demande devrait être traité par une API. Mais qu'est-ce qui ne va pas avec l'envoi du résultat OOB JSON


En fin de compte, la combinaison de l'actionResulte personnalisée et de mon attribut de filtre a conduit au comportement souhaité. Merci pour l'explication, c'était génial!



3
votes

Je pense que c'est ce que vous recherchez: xxx

de @roosteronacid: Retour JSONRESULT Actionfilter


0 commentaires

0
votes

Je viens de rencontrer le même problème et j'ai trouvé une approche légèrement différente. L'idée de base était de NotherDev . Je voudrais introduire un iactionInvoker . xxx

Dans ce cas, chaque requête commençant par "/ API /" aura transformé le résultat de JSON, cependant uniquement lorsque le acompteReturnValue n'est pas un type hérité de ActionResult Déjà.

iactionInvoker est résolu par dépendencyResolver , vous devez donc définir l'enregistrement dans votre conteneur de COI préféré que vous avez définir comme dépendencyresolver . xxx

pour jsonresult Vous pouvez utiliser l'intégré ou Ce .

Dans un cas, vous utilisez des méthodes d'action ASYNC, vous devez hériter de asynccontrolleractioninvoker au lieu de < Code> ControllerActionInvoker Et je suppose que vous devrez ajouter un autre enregistrement pour iAsyncACTIONInvoker aussi. Je ne suis pas sûr des changements dans la partie ASYNC de l'invocateur lui-même.


0 commentaires