![](/img/trans.png)
[英]An object reference is required for the non-static field, method, or property 'System.Web.Mvc.Controller.HttpContext.get'
[英]C# An object reference is required for the non-static field, method, or property 'HttpContext.Request'
我正在嘗試創建一個通用工廠類來調用 WCF 並注入一些標頭。 在這個類中,我試圖讀取 HTTP 標頭屬性。
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' 需要一個對象引用。由於我不是從靜態方法或類調用,這是怎么發生的。任何幫助都會受到高度贊賞。
謝謝你。
HttpContext.Request
將不起作用,因為它試圖訪問一個實例屬性,就好像它是一個靜態屬性一樣。 HttpContext.Current.Request
應該可以工作,假設到那時上下文已經與線程相關聯
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 中托管服務。
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
關聯。
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
但是,在客戶端訪問它是不可能的。 正如你所做的那樣。 配置 HTTP 頭可以由 OperationContext 類完成。
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);
}
這是一個相關的討論。
WCF 中的 HttpContext
如果有什么我可以幫忙的,請隨時告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.