2017-01-22 12 views
0

MVC 컨트롤러를 다른 클래스의 작은 조각으로 리팩토링하고 있는데 "return StatusCode (500,"Some 메시지 ")"항목.MVC 컨트롤러 외부에서 StatusCode 객체를 반환하는 방법

마치 내가 말할 수있는 한 컨트롤러 밖에서이 작업을 수행 할 수없는 것처럼 보입니다.

이 방법이 가능합니까? 아니면 응답을 반환하고 호출 코드 (MVC 컨트롤러)에서 해당 유형으로 다시 변환 할 수있는 다른 방법을 찾아야합니까?

MVC 작업의 원래 유형이 IActionResult이므로, 적절한 응답 (때때로보기 (모델)), 때로는 Json()을 반환하는 작업 내에서, 및 다른 시간 StatusCode (< 500>), 즉 내 응답이 일관성이 없습니다.

이 코드를 픽업하여 다른 클래스로 옮겨서 자연스럽게 사용할 수있는 방법이 있습니까? 그렇지 않으면 내가 컨트롤러에서 반환하고 리턴 한 것을 나타 내기 위해 내 자신의 객체를 수작업으로 만들어야합니다. 그래서, 무엇이 추천 되는가?

은 즉, 이상적으로는 다음과 같은 조치 결과를 반환 할 수 있도록하려면 컨트롤러의 외부 클래스에 "(내보기 이름", myModel)보기를 반환 ". 나는이를 어떻게 을?

"StatusCode", "Json"및 "View"값이있는 상태 코드, 메시지, 객체 (모델 역할을 수행함), 뷰 이름 및 ActionResultType이라는 새 열거 형을 포함하는 단일 객체입니다. 컨트롤러가 반응을 수신 할 때 적절한 자연스러운 상태로 다시 매핑 할 수 있습니다.

아마 내가 약간 멀리 갈 것이고 대신 논리의 주요 부분을 꺼내야합니다. 컨트롤러보다 더 유연한 응답을 만들기보다는

가능한 경우 각 조치 결과를 약 10 줄로 작성하고 싶지만 적절한 답을 다른 곳에서 돌려 줄 수있는 좋은 방법을 찾지 못하면 문제가 될 수 있습니다.

+3

컨트롤러 외부의 논리는 HTTP 오류 코드를 모르거나 신경 쓰지 않아야합니다. – DavidG

+0

이들 모두에는 ActionResult의 기본 유형이 있으므로 문제가 무엇인지 잘 모르겠습니다. –

+0

"return InternalServerError (새 예외 ("일부 사용자 정의 메시지 "));" –

답변

0

컨트롤러간에 공유 코드가 필요한 경우 공유 코드를 보유하도록 기본 컨트롤러를 설정하고 액세스가 필요한 다른 컨트롤러에서 해당 기본 컨트롤러를 상속 할 수 있습니다.

ActionResult는 원하는 모든 것을 보유합니다. 커스텀 객체에서 원하는 모든 것들은 모두 ActionResult의 서브 클래스로 존재합니다. JsonResult는 ActionResult의 서브 클래스입니다. 각 오류 코드마다 몇 가지 하위 클래스가 있습니다. 나는 HttpNotFoundResult가 또 하나라고 믿는다.

컨트롤러 내부에서 ActionResult/Redirect/View/StatusCode와 관련된 대부분의 정보를 유지하는 것이 좋습니다. 그것이 일반적으로있는 곳입니다.

0

당신이 사람들을 대체 할 수 있습니다 :

상태 코드 도우미 메서드 어쨌든 무엇이다
var result = new ObjectResult("Some message"); 
result.StatusCode = statusCode; 
return result; 

. 메시지를 필요로하지 않는 경우

, 당신은 할 수 있습니다 :

return new StatusCodeResult(500); 

그냥 파일의 맨 위에 using Microsoft.AspNetCore.Mvc;을 추가합니다.