2014-09-12 4 views
0

У меня есть проект с контроллерами MVC и Web API. Он использует Windows Auth. Однако я хочу защитить конкретное действие веб-API с помощью настраиваемого атрибута. Я создал следующий раз, чтобы получить основной поток создать (в конечном счете, он будет проверять пользователь IP-адрес):Пользовательский атрибут Not Firing

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; 
     } 
    } 
} 

Я украсил свои веб-действия API с помощью вызова этого атрибута. Проблема в том, что когда я запускаю свой код локально, код атрибута никогда не попадает. Действие. Это конкретное действие принадлежит контроллеру, который не использует Windows Auth.

Почему мой атрибут не называется? Нужно ли его регистрировать? Есть ли конфликт, потому что мой проект содержит как MVC, так и Web 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

Вам необходимо зарегистрировать свой атрибут в RegisterGlobalFilters в своем классе FilterConfig.cs.

Надеюсь, это поможет.

+0

Нет, это зарегистрирует фильтр как глобальный, то есть вызовет его для всех запросов. – ondra