2014-09-12 5 views
0

MVC 및 웹 API 컨트롤러가 모두 포함 된 프로젝트가 있습니다. Windows 인증을 사용합니다. 그러나 사용자 지정 특성을 사용하여 특정 웹 API 동작을 보호하려고합니다. 나는이 속성에 대한 호출 내 웹 API 조치를 장식 한맞춤 속성이 실행되지 않음

using System.Web; 
using System.Web.Http; 
using System.Web.Http.Filters; 

namespace UoB.People.UserInterface.Mvc.Filters 
{ 
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] 
    public class IPAuthorize : AuthorizationFilterAttribute 
    { 
     protected bool AuthorizeCore(HttpContextBase httpContext) 
     { 
      return true; 
     } 
    } 
} 

: 나는 다음과 같은 단지 (궁극적으로는 사용자의 IP 주소를 확인합니다)를 설정 기본 흐름을 얻기 위해 만들었습니다. 문제는 코드를 로컬에서 실행할 때 속성 코드가 절대 적중되지 않는다는 것입니다. 액션이 있습니다. 이 특정 작업은 Windows Auth를 사용하지 않는 컨트롤러에 속합니다.

왜 내 속성이 호출되지 않습니까? 어딘가에 등록해야합니까? 프로젝트에 MVC 및 웹 API 컨트롤러가 모두 포함되어있어 충돌이 있습니까? 나는 어딘가 간단한 오류를 만들었나요?

감사합니다.

답변

0

마지막으로 내 문제를 파악했습니다. 실제로 OnAuthorization 및 AuthorizeCore를 재정의해야했습니다. 다음 예는 이것을 보여줍니다.

public class IPAuthorize : AuthorizeAttribute 
{ 
    public string AuthorisedIPs { get; set; } 

    public override void OnAuthorization(HttpActionContext actionContext) 
    { 
     if (AuthorizeCore((HttpContextBase)actionContext.Request.Properties["MS_HttpContext"])) 
      return; 

     base.HandleUnauthorizedRequest(actionContext); 
    } 

    protected bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     // Logic here. 
    } 
} 

다른 누군가가 문제가 발생하면 도움이되기를 바랍니다.

2

FilterConfig.cs 클래스의 RegisterGlobalFilters에 속성을 등록해야합니다.

희망이 도움이됩니다.

+0

아니요, 필터를 전역으로 등록합니다. 즉, 모든 요청에 ​​대해 필터를 호출합니다. – ondra

관련 문제