2

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

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

filterContext.HttpContext.Request.IsLocal

有没有办法解决这个问题?

4

4 回答 4

5

如果您使用的是 webhost,即在 asp.net 中托管 webapi,您可以使用访问 HttpContext

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

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

于 2012-10-08T04:20:45.053 回答
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;
   }
}

这具有在自托管时也可以工作的额外好处。

于 2013-02-14T15:51:19.270 回答
0

您可以直接使用HttpRequestMessage的IsLocal扩展方法。关联

例如:

using System.Net.Http;

...

public void PostUser(User user) 
{
    if (!base.Request.IsLocal())    
    { 
        ...
于 2015-04-06T16:03:11.400 回答
0

MS_Islocal 属性对我不可用,而是这有效 -

if (Request != null && Request.Properties.ContainsKey("MS_RequestContext")){
                    var context = Request.Properties["MS_RequestContext"] as HttpRequestContext;
                    return context.IsLocal;
                }
                return false;
于 2017-07-11T15:28:23.447 回答