c# - mvc 的实体框架数据服务请求标头
问题描述
我们有一个实体框架 Web 服务,需要身份验证才能访问。每次发送请求时都需要进行此身份验证。
系统即时编辑通过覆盖 mainWindow.xaml.cs 文件中实体容器的 OnSendingRequest 事件,使其在 WPF 应用程序中完美运行。然后将授权添加到标题中。我发现一个资源告诉我做类似的事情,但我不知道这在 ASP.NET MVC 项目中是如何工作的,因为该资源似乎只给出了如何在 WPF 中为单个请求执行此操作的示例。如何:在客户端请求中设置标头(WCF 数据服务
对于每个请求,我都需要为 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, 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]。
推荐阅读
- mysql - MySQL - 哪个文件正在运行查询
- flutter - 如何处理 Flutter 应用程序中的垃圾邮件按钮点击?
- ios - Nativescript 提交到 Apple Store 失败并出现错误 ITMS-90034
- docker - 找不到 docker 的钥匙串访问权限
- objective-c - 无法解释此试飞崩溃报告
- c# - 从私钥创建以太坊公共地址
- java - 我正在尝试实施 Eratosthenes 筛,但它仅适用于小于 33 的数字
- c# - 在 VS Code 中调试 Powershell cmdlet(用 c# 编写)
- amazon-cloudformation - Cloudformation:如何将属性附加到预定义的存储桶?
- powershell - 将进程环境变量解析为 Windows 任务