我具有越来越有asp.net网页API那种恼人的情况。 事情是我有一个API,它已经在生产,但是我不断做出改变和重新部署。
我有一个过滤器,它负责检查,如果请求为https,这对生产工作真棒,但是,当请求是本地的过滤器阻止所有的HTTP请求,这是不是我想要的。 我想允许与HTTP本地请求。 我有一个过滤器,其确实在MVC3完全一样的事情,我可以这样做:
filterContext.HttpContext.Request.IsLocal
是否有任何变通解决这个问题呢?
我具有越来越有asp.net网页API那种恼人的情况。 事情是我有一个API,它已经在生产,但是我不断做出改变和重新部署。
我有一个过滤器,它负责检查,如果请求为https,这对生产工作真棒,但是,当请求是本地的过滤器阻止所有的HTTP请求,这是不是我想要的。 我想允许与HTTP本地请求。 我有一个过滤器,其确实在MVC3完全一样的事情,我可以这样做:
filterContext.HttpContext.Request.IsLocal
是否有任何变通解决这个问题呢?
如果您使用的是虚拟主机提供商,即在asp.net主办的WebAPI,您可以使用访问的HttpContext
HttpContextBase httpContextBase;
request.Properties.TryGetValue("MS_HttpContext", out httpContextBase);
然后,您可以使用httpContextBase.Request.IsLocal
来确定是否这个请求是本地的。
您可以使用扩展方法在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;
}
}
这样做的时候自托管也在努力的好处。
您可以直接使用HttpRequestMessage的IsLocal扩展方法。 链接
例如:
using System.Net.Http;
...
public void PostUser(User user)
{
if (!base.Request.IsLocal())
{
...
MS_Islocal财产是不可代替我这个工作 -
if (Request != null && Request.Properties.ContainsKey("MS_RequestContext")){
var context = Request.Properties["MS_RequestContext"] as HttpRequestContext;
return context.IsLocal;
}
return false;