2012-08-07 3 views
2

나는 asp.net 웹 api로 짜증나는 상황이되고있다. 것은 생산에 이미있는 API를 가지고 있지만, 나는 끊임없이 변화하고 다시 배포하고 있습니다.asp.net 웹 API에서 로컬 요청을 필터링하는 방법?

요청이 https인지, 프로덕션 환경에서 작동하는지 확인하는 필터가 있습니다. 그러나 요청이 로컬 일 때 필터는 모든 http 요청을 차단합니다. 이는 내가 원하지 않는 것입니다. http로 로컬 요청을 허용하고 싶습니다. 모든 작업이 문제에 주위가

filterContext.HttpContext.Request.IsLocal 

: 나는 MVC3에 동일한 일을하는 필터가 있고, 내가 좋아하는 뭔가를 할 수 있습니까?

+0

가 왜 HTTPS를 사용하여 로컬 호스트에서 액세스하지 않는거야? –

답변

5

당신이 asp.net에서 webapi를 호스팅하는 웹 호스트의 즉를 사용하는 경우, 당신이 요청이 로컬 인 경우 다음 결정 httpContextBase.Request.IsLocal을 사용할 수 있습니다

HttpContextBase httpContextBase; 
request.Properties.TryGetValue("MS_HttpContext", out httpContextBase); 

를 사용하여 HttpContext에 액세스 할 수 있습니다.

3

확장 메소드를 사용하여 Request.Properties Dictionary의 값에 액세스 할 수 있습니다. 예를 들면 다음과 같습니다.

public static class HttpRequestExtensions 
{ 
    public static bool IsLocal(this HttpRequestMessage request) 
    { 
     var flag = request.Properties["MS_IsLocal"] as Lazy<bool>; 
     return flag != null && flag.Value; 
    } 
} 

이 경우 자체 호스팅 할 때도 효과가 있습니다.

0

사용자가 직접 HttpRequestMessageIsLocal 확장 방법을 사용할 수 있습니다. 예를 들어 link

:

using System.Net.Http; 

... 

public void PostUser(User user) 
{ 
    if (!base.Request.IsLocal())  
    { 
     ... 
0

MS_Islocal 속성이 나에게 사용할 수없는 대신이 일 -

if (Request != null && Request.Properties.ContainsKey("MS_RequestContext")){ 
        var context = Request.Properties["MS_RequestContext"] as HttpRequestContext; 
        return context.IsLocal; 
       } 
       return false; 
관련 문제