mvc 的实体框架数据服务请求标头

问题描述

我是服务和服务器方面的新手。所以这可能是一个非常简单的问题。

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

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

对于每个请求,我都需要为 mvc 项目的连接制作相同的身份验证标头。 任何帮助表示赞赏。

解决方法

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

 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,ClientRuntime clientRuntime)
    {
        clientRuntime.ClientMessageInspectors.Add(new ClientMessageLogger());
    }
    public void ApplyDispatchBehavior(ContractDescription contractDescription,DispatchRuntime dispatchRuntime)
    {
        return;
    }

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

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

像这样:enter image description here

,

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

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

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;

这既会创建并返回服务的实例,以在调用方法中使用,还会自动创建授权并执行它。

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...