non-static 字段、方法或 属性 'HttpContext.Request' 需要 C# object 引用

C# An object reference is required for the non-static field, method, or property 'HttpContext.Request'

我正在尝试创建一个公共工厂 class 来调用 WCF 并注入一些 headers。在此 class 中,我试图读取 HTTP Header 属性。

    using System.ServiceModel;
    using System.ServiceModel.Channels;
    using ServiceReference;
    using Microsoft.AspNetCore.Http;
namespace Service
{
     public class ServiceFactory
        {

            public static ServiceClient Create()
            {
                ServiceProxy service = new ServiceProxy();
                string userName = HttpContext.Request.Headers["AUTH_USERNAME"];
                string authenricationType = HttpContext.Request.Headers["AUTH_TYPE"];

                using (new System.ServiceModel.OperationContextScope((System.ServiceModel.IClientChannel)service.InnerChannel))
                {          
                    HttpRequestMessageProperty requestMessage = new HttpRequestMessageProperty();
                    requestMessage.Headers["AUTH_USERNAME"] = userName;
                    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage;

                    requestMessage.Headers["AUTH_TYPE"] = authenricationType;
                    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage;
                }
                return service;
            }       
        }
}

但我收到编译错误 “non-static 字段、方法或 属性 'HttpContext.Request'[需要 object 引用=22=]。因为我不是从静态方法或 class 调用这怎么会发生。任何帮助将不胜感激。

谢谢。

HttpContext.Request 将不起作用,因为它试图访问一个实例 属性,就好像它是一个静态 属性。 HttpContext.Current.Request 应该可以工作,假设此时上下文已与线程相关联

WCF中没有HttpContext,WCFsession不同于Httpsession。请参考以下link.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/wcf-services-and-aspnet?redirectedfrom=MSDN
在 server-side 上,我们可以启用 Asp.net 兼容模式来访问 HttpContext。这需要我们在 IIS 中托管该服务。

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>

Link.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/aspnet-compatibility?redirectedfrom=MSDN
https://www.aspsnippets.com/Articles/Access-and-Use-HttpContextCurrent-in-WCF-Service-in-ASPNet.aspx
但是,无法在 client-side 上访问它。正如你所做的那样。配置 HTTP header 可以由 OperationContext class.

完成
using (new OperationContextScope((IClientChannel)service))
            {
                //first method to add HTTP header.
                //HttpRequestMessageProperty request = new HttpRequestMessageProperty();
                //request.Headers["MyHttpheader"] = "myvalue";
                //OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = request;
                //WebOperationContext is syntax sugar of wrapper above method.                OperationContext oc = OperationContext.Current;
                WebOperationContext woc = new WebOperationContext(oc);
                woc.OutgoingRequest.Headers.Add("myhttpheader", "myvalue");
                //invocation, only valid in this request.
                var result = service.GetResult();
                Console.WriteLine(result);
            }

这里有一个相关的讨论。
HttpContext in WCF
如果有什么我可以帮忙的,请随时告诉我。