2015-01-02 1 views
0

현재 동일한 코드를 공유하는 컨트롤러가 10 개 가까이 있습니다. 이 코드는 매우 간단합니다. 데이터 세트가 null인지 확인하고 현재 사용자에게 데이터 액세스 권한이 있는지 확인합니다.여러 웹 API 컨트롤러가 공유하는 코드를 중앙화하려면 어떻게합니까?

문제가있는 경우 HttpResponseException을 발생시킵니다.

코드는 각 컨트롤러에있을 때 작동합니다. 나는 또한 코드를 중앙화 할 수 있었지만 내가 한 일은 잘못이라고 생각한다. ApiController를 상속받은 새 클래스를 만든 다음 컨트롤러에 새 클래스를 상속받습니다. 이것은 HttpResponseExceptions가 작동하도록하는 유일한 방법입니다. 다음과 같이 코드는 다음과 같습니다

//New centralized class: 

public class AuthorizationClass : ApiController 
{ 
    private DataModel db = new DataModel(); 

    public async Task checkUserisValid(int user_id) 
    { 
     user_list user_list = await db.user_list.FindAsync(user_id); 

     if (user_list == null) 
     { 
      throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest,"This user does not exist")); 
     } 

     int businessID = user_list.business_id; 

     var result = checkAccess(User.Identity.Name, businessID); 

     if (result.Count <= 0) 
     { 
      throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "You do not have access to modify this business")); 
     } 
    } 

    public static List<user_details> checkAccess(string userName, int id) 
    { 
     //code which checks if the user is in the right tables 
      return checkAccess.ToList(); 
    } 
} 

그런 다음 컨트롤러 클래스에서, 내가 가진 :

public class MyController : AuthorizationClass 
{ 
     public async Task<IHttpActionResult> Postnew_table(int id, new_table new_table) 
     { 
      await checkUserisValid(id); 

     //rest of controller  
      } 
} 

나는 다른 방법으로 그것을 할 시도했지만이 나는 그것이 HttpResponseException 작업을 얻을 수있는 유일한 방법입니다. 클래스를 상속받지 않고이 작업을 수행하는 더 좋은 방법이 있습니까? 아니면 내가 수행 한 작업을 수행하는 유일한 방법입니까?

감사합니다.

+0

기본 ASP가 아닙니다. 그것이 asp.net mvc – John

+0

사과일지도 모른다 사과, 나는 틀린 꼬리표를 사용했다! – user3129594

+1

컨트롤러에이 코드가 있어야하는 이유는 무엇입니까? 공통 조립품을 사용하지 않는 이유는 무엇입니까? 그러나 나는 또한 잘못된 것을 보지 않으며, 모든 컨트롤러는 AuthorizationClass로부터 상속받을 것입니까? 그게 효과가있는 것 같아요. –

답변

1

공용 어셈블리의 정적 도우미 클래스로이 두 메서드를 이동할 수 있습니다. Request은 컨트롤러의 인스턴스 변수이며 메서드로 전달하면됩니다.

public static class SomeHelper 
{ 
    public static async Task checkUserisValid(int user_id, DataModel db, Request request, User user) 
    { 
     user_list user_list = await db.user_list.FindAsync(user_id); 

     if (user_list == null) 
     { 
      throw new HttpResponseException(request.CreateErrorResponse(HttpStatusCode.BadRequest,"This user does not exist")); 
     } 

     int businessID = user_list.business_id; 

     var result = checkAccess(user.Identity.Name, businessID); 

     if (result.Count <= 0) 
     { 
      throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "You do not have access to modify this business")); 
     } 
    } 

    public static List<user_details> checkAccess(string userName, int id) 
    { 
     //code which checks if the user is in the right tables 
      return checkAccess.ToList(); 
    } 

} 
관련 문제