Entity Framework 数据服务请求 headers 用于 mvc

Entity Framework data service request headers for mvc

我们有一个 Entity framework 网络服务,需要身份验证才能访问。每次发送请求时都需要进行此身份验证。

即时编辑系统通过覆盖 mainWindow.xaml.cs 文件中实体容器的 OnSendingRequest 事件使其完美地工作于 WPF 应用程序。然后将授权添加到 header。我找到了一个资源告诉我做类似的事情,但我不知道这在 ASP.NET MVC 项目中是如何工作的,因为该资源似乎只给出了一个如何针对单个请求执行此操作的示例,在WPF。 How to: Set Headers in the Client Request (WCF Data Services

我需要为每个请求为 mvc 项目的连接进行相同的身份验证 header。

您可以尝试使用消息拦截器来插入身份验证 headers。

 public class ClientMessageLogger : IClientMessageInspector
{
    public void AfterReceiveReply(ref Message reply, object correlationState)
    {
        MessageHeader header1 = MessageHeader.CreateHeader("Testreply", "http://Test", "Test");
    request.Headers.Add(header1);
    }

    public object BeforeSendRequest(ref Message request, IClientChannel channel)
    {
        MessageHeader header = MessageHeader.CreateHeader("UserAgent", "http://User", "User1");
    reply.Headers.Add(header);
    return null;

    }
}
[AttributeUsage(AttributeTargets.Interface)]
public class CustomBehavior : Attribute, IContractBehavior
{
    public Type TargetContract => typeof(ServiceReference1.ICalculator);
    public void AddBindingParameters(ContractDescription contractDescription, ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
    {
        return;
    }

    public void ApplyClientBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, ClientRuntime clientRuntime)
    {
        clientRuntime.ClientMessageInspectors.Add(new ClientMessageLogger());
    }
    public void ApplyDispatchBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime)
    {
        return;
    }

    public void Validate(ContractDescription contractDescription, ServiceEndpoint endpoint)
    {
        return;
    }
}

在BeforeSendRequest方法中,可以插入一个header,要应用此消息拦截器,需要在客户端的服务引用中添加[CustomBehavior]。

像这样:

万一其他人觉得这有用,我无意中解决了这个问题。

我制作了一个静态 class 和一个静态方法,可以从项目中的任何页面调用。使用此代码:

var serviceUri = new Uri(WebConfigurationManager.AppSettings["DataServiceUri"]);
myService result = new myService(serviceUri);

result.SendingRequest += new EventHandler<SendingRequestEventArgs>((s, e) =>
{
    string authenticationString = applicationName + " " + applicationId;
    e.RequestHeaders.Add("Authorization", authenticationString);
});

return result;

这既创建并 returns 服务实例,在调用方法中使用,也自动创建授权并执行它。

这必须在与服务通信的每个控制器上完成。 享受。