首页 > 解决方案 > mvc 的实体框架数据服务请求标头

问题描述

我们有一个实体框架 Web 服务,需要身份验证才能访问。每次发送请求时都需要进行此身份验证。

系统即时编辑通过覆盖 mainWindow.xaml.cs 文件中实体容器的 OnSendingRequest 事件,使其在 WPF 应用程序中完美运行。然后将授权添加到标题中。我发现一个资源告诉我做类似的事情,但我不知道这在 ASP.NET MVC 项目中是如何工作的,因为该资源似乎只给出了如何在 WPF 中为单个请求执行此操作的示例。如何:在客户端请求中设置标头(WCF 数据服务

对于每个请求,我都需要为 mvc 项目的连接创建相同的身份验证标头。

标签: c#asp.net-mvcwpfentity-frameworkwcf-data-services

解决方案


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

 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 方法中,您可以插入一个标头,要应用此消息拦截器,您需要在客户端的服务引用中添加 [CustomBehavior]。

像这样:在此处输入图像描述


推荐阅读