2012-08-13 13 views
1

첫 번째 ASP.NET 웹 API 프로젝트에서 작업 중이며 맞춤 인증 특성이 작동하고 있습니다. 내가 원하는 것은 요청이 로컬 (즉, 디버깅) 인 경우 권한 부여 검사가 무시되도록 속성을 설정하는 것입니다.HttpRequestMessage가 왜 그렇게 제한적입니까?

다른 모든 ASP.NET MVC 버전에서 Request.IsLocal (또는 Request.UserHostAddress)을 검사하여 요청이 로컬 시스템에서 왔는지 확인할 수 있지만 System.Web.Http.AuthorizeAttribute는 HttpRequestMessage 분명히이 정보가 전혀없는 개체이며 Request 개체에서 몇 가지 다른 것들도 누락 된 것으로 보입니다.

웹 API와 함께 사용하기위한 완전히 새로운 (분명히 제한된) 클래스 집합을 다루는 것은 무엇이며, 더 직접적으로 인증 대상 속성에서 수신자의 호스트 주소를 얻는 방법은 무엇일까요?

+0

이러한 속성은 HTTP 사양의 일부가 아닌 때문에이 제한되어 있으므로없는 범위 내에서 할 수 있습니다. HttpWebRequest/HttpWebResponse의 문제점은 모든 것을위한 거대한 양동이가되었다는 것입니다. 전혀 별거가 없습니다. –

+0

아마 이것은 2013 년에 사용할 수 없었습니다 ... 이것을 사용하십시오 : requestMessage.GetRequestContext(). 마지막 코멘트는 IsLocal – Sam

답변

5

here 또는 here과 같은 요청 정보를 얻는 데는 몇 가지 예가 있습니다. 이 단지 그것이 어떤 디버그 코드 만 주변이 같은 조건문을 사용하여 더 안전 할 수 있습니다 다음 debuging에 대한 진정 경우

public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext) 
    { 
     var context = actionContext.Request.Properties["MS_HttpContext"] as System.Web.HttpContextBase; 
     bool isLocal = context.Request.IsLocal; 

- 특히 보안 컨텍스트에서 ... 이유에

#if DEBUG 
// 
#endif 

... 나는 이것이 단위 테스트와 조롱을 쉽게하기 위해 적어도 부분적으로는 상상할 수있다. HTTP 컨텍스트는 ASP.NET System.Web 구조이다. WebApi는 독립적으로 자체 호스팅 코드로 실행될 수 있도록 설계되었다. ASP.NET.

+1

+1입니다. 실제로 Web API는 일반적인 솔루션이며 IIS의 ASP.NET은 실행될 수있는 3 가지 컨텍스트 중 하나입니다 (웹 호스팅, 자체 호스팅, 메모리 호스팅) –

+0

ASP.NET 자체를 콘솔 또는 서비스 앱을 오랫동안 사용할 수 있습니다. 나는 그 변화에 대한 가장 중요한 이유인지 확신 할 수 없지만, 새로운 제안은 내가 모르고있는 예전의 방법으로 몇 가지 문제를 해결할 것입니다. 클라이언트의 주소를 얻는 것은 MS가 직접하는 간단한 방법으로 구축하지 못했던 충격적인 기본 요구 사항처럼 보입니다. – Chris

0

여러 미들웨어 구성 요소를 개발할 때나 HttpContext를 통해 직접 또는 MS_HttpContext를 통해 HttpContext를 사용하거나 IIS_HttpContext를 통해 불행한 IIS 바인딩 결정을 내린 HttpContext를 사용하거나 의존하는 다른 사람들을 지원할 때 이와 동일한 문제가 발생했습니다. 옵션). 두 상황에서 모두 작동하는 HttpContext를 돌려줌으로써이 문제를 해결할 수있는 작은 Shim 라이브러리를 작성했습니다. 당신은 github에 그것을 발견하고 NuGet

Install-Package HttpContextShim