Pourquoi mon ASP.NET l'API Web ActionFilterAttribute OnActionExecuting pas de tir?
Je suis en train de mettre en œuvre ce que l'on constate ici: http://www.piotrwalat.net/nhibernate-session-management-in-asp-net-web-api/ mais je vais avoir un problème avec mon NhSessionManagementAttribute
.
J'ai mis des points d'arrêt sur mon OnActionExecuting(HttpActionContext actionContext)
pour voir si la fonction n'a jamais été appelé -- il n'était pas.
J'ai vérifié mon global.asax.cs
fichier & je suis en fait de l'inscription de l' ActionFilter
avec:
GlobalConfiguration.Configuration.Filters.Add(new NhSessionManagementAttribute());
J'ai aussi décoré de mon contrôleur de classe elle-même, ainsi que ses actions avec l'attribut en vain:
public class ClientsController : ApiController {
static readonly ClientRepository repository = new ClientRepository();
[NhSessionManagement]
public IEnumerable<Client> GetAllClients() {
return repository.GetAll();
}
[NhSessionManagement]
public Client GetClient(int id) {
Client client = repository.Get(id);
if (client == null) {
throw new HttpResponseException(
new HttpResponseMessage(HttpStatusCode.NotFound)
);
}
return client;
}
}
Pourquoi serait-ce filtre pas de tir à l'un des événements à l'intérieur?
Vous devez vous connecter pour publier un commentaire.
Si vous travaillez dans un projet contient à la fois MVC et WebAPI assembilies, pourriez-vous vérifier ce qui est de l'espace de noms de votre ActionFilterAttribute de l'espace de noms. C'est assez déroutant car il y a deux ActionFilterAttributes sous les deux:
La réponse ci-dessus m'a vraiment aidé à sauver les autres peu de temps... c'est ici explicitement la différence.
Standard Contrôleurs MVC utilisation:
OData HTTP Contrôleurs utilisation:
Pour quelqu'un d'autre qui vient à travers cela, ActionFilterAttribute ne se déclenche pas lors de l'appel de YourController.YourAction de votre UnitTest.
Dans le TestMethod ci-dessus, toute ActionFilterAttributes sur YourController.YourAction ne sera pas appelé. Cependant, si vous appelez YourController.YourAction à partir d'un navigateur, votre ActionFilterAttribute sera appelée.
Cela est vrai pour au moins WebApi, mais je ne sais pas si elle s'applique à la MVC.
Ici est la mise en Œuvre complète:
Pour WebApi, vous devez installer Microsoft.AspNet.WebApi.De base à partir de nuget.
Pour MVC, vous pouvez utiliser le Système.Web.MVC.
Mon problème était beaucoup plus simple:
Vérifier que votre Contrôleur est décoré avec
<actionPreProcessActivitiesAttribute()> _