현재 동일한 코드를 공유하는 컨트롤러가 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 작업을 얻을 수있는 유일한 방법입니다. 클래스를 상속받지 않고이 작업을 수행하는 더 좋은 방법이 있습니까? 아니면 내가 수행 한 작업을 수행하는 유일한 방법입니까?
감사합니다.
기본 ASP가 아닙니다. 그것이 asp.net mvc – John
사과일지도 모른다 사과, 나는 틀린 꼬리표를 사용했다! – user3129594
컨트롤러에이 코드가 있어야하는 이유는 무엇입니까? 공통 조립품을 사용하지 않는 이유는 무엇입니까? 그러나 나는 또한 잘못된 것을 보지 않으며, 모든 컨트롤러는 AuthorizationClass로부터 상속받을 것입니까? 그게 효과가있는 것 같아요. –