我遇到的情况让asp.net web api变得烦人。问题是我有一个已经投入生产的API,但我不断进行更改和部署。
我有一个过滤器,负责检查请求是否为https,在生产时效果很好,但是当请求是本地的时,过滤器会阻止所有http请求,这不是我想要的。我想用http允许本地请求。我有一个过滤器,它在MVC3上执行完全相同的操作,我可以执行以下操作:
filterContext.HttpContext.Request.IsLocal
这个问题有解决方法吗?
答案 0 :(得分:5)
如果你在asp.net中使用web主机i.s托管web api,你可以使用
访问HttpContextHttpContextBase 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;