ActionFilterAttribute を作成しました
public class LoggingNHibernateSessionAttribute : ActionFilterAttribute
名前が示すように、フィルターの目的はログを記録することであり、ターゲット アクションの前と後にそれぞれトランザクションを開き、コミットします。
WebApi(myAPI) プロジェクト (MVC4) と WebApplication(myContent) があります。
myAPI の各 Api コントローラーは、この属性で装飾されています。
using myApp.Web.Common.Filters;
namespace myAPI.Web.Api.Controllers
{
[LoggingNHibernateSession]
public class CategoriesController : ApiController
{
HTTP アクション (Get/Post) が ApiController 内で実行されると、ActionFilter が実行され、期待どおりに正常に動作します。
問題: WebApplication(myContent) では、これらのコントローラーも ActionFilter で装飾しました。
using myApp.Web.Common.Filters;
namespace myContent.Web.Content.Places.Controllers
{
[LoggingNHibernateSession]
public class PlacesController : Controller
{
ただし、ここでは、コントローラー内でアクションが実行されると、ActionFilter は実行されません。
ActionFilter はSystem.Web.Http.Filtersに属します。
いくつかの投稿を読みましたが、System.Web.Mvc フィルターを使用すると書かれていました。そこで、ActionFilter をSystem.Web.Mvcからのものに変更しました 。それを切り替えると、ActionFilter は WebApi でも動作しなくなりました。
ここで何が間違っていますか?