2017-05-09 63 views
1

任何人都可以告诉我为什么我无法在我创建的新类的断点上处理WebApi发布请求?下面是我为装修新的类和方法的代码与类属性无法在AuthorizeAttribute类上创建断点

namespace MercuryUserWeb.Core.Authorization { 

public class ClientUserApi : System.Web.Http.AuthorizeAttribute 
{ 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     WebRequestState webRequestState = ContainerHome.Container.Resolve<WebRequestState>(); 
     ActionDescriptor actionDescriptor = filterContext.ActionDescriptor; 
     if (actionDescriptor.IsDefined(typeof(StaffUserAuthorizeAttribute), true)) 
      return; 

     if (!webRequestState.IsAuthenticated || webRequestState.ClientUser == null) 
     { 
      filterContext.Result = new HttpUnauthorizedResult(); 
      return;   // 401, always show log-in page 
     }    
    } 
    } 
} 

控制器动作

namespace MercuryUserWeb.Areas.JApi.Controllers{ 
[ClientUserApi] 
    public class ClientViewController: ApiController, IJApiController 
    {   

    [System.Web.Http.HttpPost] 
    [ClientUserApi] 
    public ActionResult assignViews(ClientViewModel model) 
    { 
     string[] clientViewIdsArray = model.selectedViewsForClient.Split(','); 
     IEnumerable<long> parsedClientViewIdArray = clientViewIdsArray.Select(long.Parse); 
     List<long> clientViewsIdList = parsedClientViewIdArray.ToList(); 

     string[] volPoolIdArray = model.volPoolIds.Split(','); 
     IEnumerable<long> parsedIdArray = volPoolIdArray.Select(long.Parse); 
     List<long> volPoolIdList = parsedIdArray.ToList(); 

     var clientId = clientApiPrincipal.ClientUser.ClientId; 

     clientViewService.assignViews(clientViewsIdList, volPoolIdList, clientId); 

     return null; 

    } 

回答

0

尝试使用override关键字。否则你在AuthorizeAttribute中隐藏了OnAuthorization的虚拟实现。

public class ClientUserApi : System.Web.Http.AuthorizeAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     WebRequestState webRequestState = ContainerHome.Container.Resolve<WebRequestState>(); 
     ActionDescriptor actionDescriptor = filterContext.ActionDescriptor; 
     if (actionDescriptor.IsDefined(typeof(StaffUserAuthorizeAttribute), true)) 
      return; 

     if (!webRequestState.IsAuthenticated || webRequestState.ClientUser == null) 
     { 
      filterContext.Result = new HttpUnauthorizedResult(); 
      return;   // 401, always show log-in page 
     }    
    } 
} 
+0

谢谢。现在就试试这个。 –

+0

谢谢。这工作。虽然我仍然获得WebRequestState的空值。不知道为什么.... –