C#非静态字段,方法或属性'HttpContext.Request'需要对象引用。

问题描述 投票:0回答:2

我正在尝试创建一个通用工厂类来调用WCF并注入一些标头。在此类中,我尝试读取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;
            }       
        }
}

但是我得到一个编译错误,因为“非静态字段,方法或属性'HttpContext.Request'需要对象引用。>>因为我不是从静态方法或类中调用此方法,所以可能会发生。任何帮助将不胜感激。

谢谢。

我正在尝试创建一个通用工厂类来调用WCF并注入一些标头。在此类中,我尝试读取HTTP Header属性。使用System.ServiceModel;使用系统。...

c# wcf .net-core
2个回答
3
投票

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


0
投票

WCF中没有HttpContext,WCF会话与Http会话不同。请参考以下链接。https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/wcf-services-and-aspnet?redirectedfrom=MSDN在服务器端,我们可以启用Asp.net兼容模式来访问HttpContext。这要求我们在IIS中托管服务。

© www.soinside.com 2019 - 2024. All rights reserved.