如何在asp.net web api中过滤本地请求?

时间:2012-08-07 15:45:11

标签: asp.net asp.net-web-api

我遇到的情况让asp.net web api变得烦人。问题是我有一个已经投入生产的API,但我不断进行更改和部署。

我有一个过滤器,负责检查请求是否为https,在生产时效果很好,但是当请求是本地的时,过滤器会阻止所有http请求,这不是我想要的。我想用http允许本地请求。我有一个过滤器,它在MVC3上执行完全相同的操作,我可以执行以下操作:

filterContext.HttpContext.Request.IsLocal

这个问题有解决方法吗?

4 个答案:

答案 0 :(得分:5)

如果你在asp.net中使用web主机i.s托管web api,你可以使用

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

然后,您可以使用httpContextBase.Request.IsLocal来确定请求是否为本地请求。

答案 1 :(得分:3)

您可以使用扩展方法访问Request.Properties字典中的值。例如:

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;
   }
}

这有额外的好处,也可以在自托管时使用。

答案 2 :(得分:0)

您可以直接使用 HttpRequestMessage IsLocal 扩展方法。 link

例如:

using System.Net.Http;

...

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

答案 3 :(得分:0)

我无法使用MS_Islocal属性,而是有效 -

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