如何筛选在asp.net网页API本地请求?(How to filter local request

2019-09-20 23:45发布

我具有越来越有asp.net网页API那种恼人的情况。 事情是我有一个API,它已经在生产,但是我不断做出改变和重新部署。

我有一个过滤器,它负责检查,如果请求为https,这对生产工作真棒,但是,当请求是本地的过滤器阻止所有的HTTP请求,这是不是我想要的。 我想允许与HTTP本地请求。 我有一个过滤器,其确实在MVC3完全一样的事情,我可以这样做:

filterContext.HttpContext.Request.IsLocal

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

Answer 1:

如果您使用的是虚拟主机提供商,即在asp.net主办的WebAPI,您可以使用访问的HttpContext

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

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



Answer 2:

您可以使用扩展方法在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;
   }
}

这样做的时候自托管也在努力的好处。



Answer 3:

您可以直接使用HttpRequestMessageIsLocal扩展方法。 链接

例如:

using System.Net.Http;

...

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


Answer 4:

MS_Islocal财产是不可代替我这个工作 -

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


文章来源: How to filter local requests in asp.net web api?