0

몇 달 전 일부 맞춤 속성이있는 WebApi 앱을 작성했습니다. 그것은 위대한 작품.컨트롤러의 mvc 5 속성이 무시되고 있습니다.

새로운 MVC 5.2.3 웹 사이트를 작성 중이며 동일한 속성을 포함하려고합니다. 나는 그것들을 옮기고 속성은 무시되고 있다는 것을 제외하고는 프로젝트가 빌드되어 실행됩니다.

[AuthorizeIt(Roles = "theRole")] 
[LogRequestResponse] 
public class HomeController : Controller{} 

이 내 두 속성의 서명 : 나는 더 많은 코드를 포함 할 수 있습니다하지만 실제로 코드 문제부터 생각하지 않는다

public class LogRequestResponseAttribute : ActionFilterAttribute 


[AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = true)] 
public class AuthorizeItAttribute : AuthorizeAttribute 

내 컨트롤러 장식입니다 그것은 내 다른 웹 사이트에서 작동합니다. 내 생각 엔 MVC와 WebApi의 차이점이며 누락 된 부분이 있습니다.

그리고 예, 저는 ASP.core가 webApi와 MVC를 통합하고 있지만 직면하고있는 문제를 해결할 수 있다는 것을 알고 있습니다. 그러나 제 일이 이것을 허용하지 않을 것입니다.

감사합니다,

+0

추가 정보 : 새로운 정보 : 내 속성이 잘 작동 ApiController에서 상속 내 컨트롤러를 변경하는 경우. 다시 변경하십시오. – Bob

답변

0

나는 내 대부분의 문제를 해결하고 내가 해결할 수없는 마지막 항목이있다. 속성과 관련하여 가장 높은 수준의 요컨대, WebAPI와 MVC는 동일한 객체를 가지고있는 것처럼 보일 수 있지만, 더 깊이 들어가면 실제로는 달라집니다.

예 : AuthorizeAttribute는 사용하는 네임 스페이스에 따라 매우 다릅니다. WebApi가 HttpActionContext를 원할 때 MVC 버전은 AuthorizationContext 매개 변수를 원합니다.

또 다른 예는 OnActionExecuted 함수가 MVC의 매개 변수로 ActionExecutedContext를 원하지만 webApi가 HttpActionExecutedContext를 원한다는 것입니다.

마지막 줄은 내 원래 WebApi 특성을 내 MVC 프로젝트에 넣은 다음 상단에서 시작하여 MVC 네임 스페이스에 있는지 확인한 다음 필요에 따라 드릴 다운 및 변경을 시작하는 것입니다.

코드를 제외한 모든 WebApi 조각에 대해 MVC를 찾을 수있었습니다. 내가와 응답의 내용에 얻을 수있는 OnActionExecuted 기능에 WebAPI를 들어

:

var response = actionContext.Response?.Content?.ReadAsStringAsync().Result; 

여기서

actionContext is a HttpActionExecutedContext 

그러나 MVC에 따라서

actionContext is a ActionExecutedContext 

위의 WebAPI 코드는 MVC에서 작동하지 않습니다. 스트림 인

actionContext.HttpContext.Response.Filter 

: 내가 MVC의 응답 내용을 읽고 무슨에서 는에 있습니다. 그러나 얼마나 많은 다른 방법으로 스트림을 읽으려고 했든지간에 항상 읽을 수없는 상태입니다.

내 질문의 마지막 답이 부분은 다음과 같습니다

MVC 5 : I는 사용자 지정 특성을 쓰고 있어요. 나는이 기능에있어 : ​​

public override void OnActionExecuted(ActionExecutedContext actionContext) 

응답 내용을 읽고 싶습니다.

  1. 질문에 대한 일반적인 솔루션은 신중하게, MVC에 이름 공간을 변경 한 다음 WEBapi 코드를 대체 코드를 통해 작업 속성 정의의 상단에 시작하는 것입니다 : 요약

    MVC와 동등합니다. 매우 짜증나고 지루한. 누구나 비슷한 것을 시도하고 질문이 있으면 기꺼이 도와 드리겠습니다.

  2. 내가 번역을 찾을 수없는 코드의 마지막 부분이 있는데, 다른 사람이 그 대답을 알고 있기를 바랍니다.

감사합니다 .... 밥