2012-08-07 63 views
2

我遇到了一种令人讨厌的asp.net web api的情况。事情是我有一个已经在生产的API,但是我不断地进行更改和部署。如何在asp.net web api中过滤本地请求?

我有一个过滤器,负责检查请求是否是https,它在生产中非常好用,但当请求是本地时,过滤器会阻止所有http请求,这不是我想要的。我想允许使用http进行本地请求。我有一个过滤器,其确实在MVC3完全一样的事情,我可以这样做:

filterContext.HttpContext.Request.IsLocal 

是否有任何变通解决这个问题呢?

+0

为什么是你不从本地主机使用HTTPS访问? – 2012-08-07 17:00:49

回答

5

,如果你使用的是托管在asp.net的WebAPI的虚拟主机即,您可以访问使用

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

的HttpContext然后可以使用httpContextBase.Request.IsLocal来确定是否这个请求是本地的。

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;