Web Api 필터 (System.Web.Http.Filters.ActionFilterAttribute
사용)를 만들었지 만 ASP.Net MVC 4에서 작동하지 못합니다. RegisterGlobalFilters()
메서드에 추가하려고 시도했지만 작동하지 않았습니다.글로벌 ASP.Net 웹 API 필터를 추가하는 방법은 무엇입니까?
ASP.Net MVC에서 호스팅되는 웹 API를 사용하는 경우 어떻게 필터를 등록하나요?
Web Api 필터 (System.Web.Http.Filters.ActionFilterAttribute
사용)를 만들었지 만 ASP.Net MVC 4에서 작동하지 못합니다. RegisterGlobalFilters()
메서드에 추가하려고 시도했지만 작동하지 않았습니다.글로벌 ASP.Net 웹 API 필터를 추가하는 방법은 무엇입니까?
ASP.Net MVC에서 호스팅되는 웹 API를 사용하는 경우 어떻게 필터를 등록하나요?
다음 코드 내에서 Global.asax에, 나를 위해 작동 : MVC 4 RC의로
public static void RegisterWebApiFilters(System.Web.Http.Filters.HttpFilterCollection filters)
{
filters.Add(new MyWebApiFilter());
}
protected void Application_Start()
{
RegisterWebApiFilters(GlobalConfiguration.Configuration.Filters);
}
, 올바른 클래스 이름은 HttpFilterCollection입니다 :
public static void RegisterWebApiFilters(System.Web.Http.Filters.HttpFilterCollection filters)
{
filters.Add(new MyWebApiFilter());
}
protected void Application_Start()
{
RegisterWebApiFilters(GlobalConfiguration.Configuration.Filters);
}
대신 사용 전역 필터 나는 이것을하기를 더 좋아한다 :
[MyWebApiFilter]
public class CustomizedApiControllerBase : ApiController
{
...
}
그리고 이후 이는 모든 API 컨트롤러를 상속합니다. CustomizedApiControllerBase
이 접근법은 global.ascx 파일의 전역 필터와 비교하여 더욱 표현력이 있습니다. 이 대답은 MVC까지 사실이 보유하고 있음을
주 5/웹 API 2
짧은 답변 : MVC와 웹 API 필터가 호환 교차되지 않으며, 당신이 세계를 등록 할 경우, 당신은해야합니다 각각에 대해 적절한 구성 클래스를 사용하십시오.
긴 대답 : ASP.NET MVC와 웹 API는 의도적으로 비슷한 방식으로 작동하도록 설계되었지만 실제로는 다른 생물체입니다.
웹 API는 System.Web.Http
네임 스페이스 아래에 있지만 MVC는 System.Web.Mvc
네임 스페이스 아래에 있습니다. 이 두 모델은 행복하게 나란히 살지만 하나는 다른 모델을 포함하지 않으며 프로그래밍 모델의 유사성에도 불구하고 기본 구현이 다릅니다. MVC 컨트롤러와 웹 API 컨트롤러가 서로 다른 기본 컨트롤러 클래스를 상속하는 것처럼 (MVC의 이름은 Controller
이고 웹 API의 이름은 ApiController
임) MVC 필터와 웹 API 필터는 서로 다른 FilterAttribute
클래스를 상속합니다 (이 경우 두 클래스 모두 동일한 이름을 공유하지만 별도입니다. 각각의 네임 스페이스에있는 클래스). 당신이 WebActivator와 프로젝트 템플릿을 사용하는 경우
웹 API 글로벌 필터는 Register
방법 WebApiConfig.cs에서 사용 가능한 HttpConfiguration
객체를 통해 등록 다음의 Global.asax에서
public static void Register(HttpConfiguration config)
{
//stuff before
config.Filters.Add(new MyWebApiFilter());
//stuff after
}
하거나. CS :
GlobalConfiguration.Configuration.Filters.Add(new MyWebApiFilter());
MVC 글로벌 필터는 프로젝트 FilterConfig.cs의 RegisterGlobalFilters
방법으로 당신에게 사용할 수있는 GlobalFilterCollection
객체의 방법으로 등록하는 WebActivator를 사용하여 다시 사용 :
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//stuff before
filters.Add(new MyMvcFilter());
//stuff after
}
}
또는 global.asax.WebActivator없는 사람들을 위해 GlobalFilters.Filters
수집의 방법으로 CS 파일 :
GlobalFilters.Filters.Add(new MyMvcFilter());
그것은 두 경우 모두 적절한 FilterAttribute
형식에서 상속 할 필요가 없습니다 주목할 가치가있다. 웹 API 필터는 System.Web.Http.IFilter 인터페이스 만 구현하면되고 MVC 필터 등록은 클래스가 System.Web.Mvc
네임 스페이스에 정의 된 몇 가지 필터 인터페이스 중 하나를 상속하는지 확인합니다.
누군가 여기서 일어날 일을 설명 할 수 있습니까? 왜 글로벌 필터가 두 세트입니까? '글로벌'을 모순이라고하지 않습니까? –
필터 집합은 MVC 용이고 다른 필터 집합은 웹 API 용입니다. 그것들은 두 개의 분리 된 것들이며 일반적으로 여러분은 다른 것에 적용되는 필터를 원하지 않을 것입니다. –
내 WebApi 필터가 두 번 호출됩니다. 아무도이 문제가 있습니까? –