【问题标题】:DataService Authorization header SendingRequest2 works locally, but not on Test ServerDataService 授权标头 SendingRequest2 在本地工作,但不在测试服务器上
【发布时间】:2021-12-13 14:07:53
【问题描述】:

我正在处理一个 MVC 项目,我们需要在数据服务的请求上发送一个 put 标头以供服务批准。为了避免未经授权的访客使用服务。

目前是这样实现的:

context.SendingRequest2 += new EventHandler<SendingRequest2EventArgs>((s, e) => {
            e.RequestMessage.SetHeader("Authorization", (applicationName + " " + applicationId));
        });

服务使用void OnStartProcessingRequest(ProcessRequestArgs args) 来检查一些硬编码值,如果标头丢失或不正确,则使用throw new DataServiceException(401, "401 Unauthorized");

整个事情在本地主机上完美运行。但是当我们将项目上传到测试服务器时,我们会体验到该服务允许获取和创建新操作,但不能更新。

示例: 我启动了网站,它显示了所有列表,其中充满了数据。我单击一个按钮打开创建新窗口,填写表格,然后按保存。没问题。 我按下其中一条记录,打开“编辑”弹出窗口,弹出窗口中填充了记录的现有数据。

但是当我更改某些内容并按保存时,窗口关闭,整个保存过程被调用并顺利运行,直到它应该触发 SendingRequest2 事件并添加标题时到达 SaveChanges()。

我创建了很多调试日志,结果发现没有添加标题。 (不知道为什么)。所以服务自然会拒绝它。

我的问题:

  • 可能缺少什么/错误,因为它可以在本地主机上运行,​​但不能在服务器上运行。
  • 还有其他方法可以做到这一点。希望有一些简单易行的东西。

顺便说一句,我们暂时在 .Net 框架 4.5.2 上运行。因为我们有很多遗留的东西需要得到支持。

编辑 如果我提到它用于 MVC5 项目会有所不同吗?

【问题讨论】:

  • 可以查看服务器上的证书认证是否失效或过期,时间是否同步。
  • 不幸的是它没有那么简单,因为如果是这样的话,我们也无法阅读。该网站也根本不可用。

标签: c# entity-framework-6 wcf-data-services


【解决方案1】:

这是解决方案,适用于所有已经在谷歌上搜索了几天并拔掉头发的人。

我找到了这篇文章:Solution to the problem article

问题很简单,IIS 阻止了 Merge、Put 和 Delete 请求,因此无法在接收端(服务器)上通过身份验证进行保存。在 localhost 中不会有问题,因为您永远不会真正离开自己的机器。

简单地说,我在添加标头之前在 SendingRequest2 事件中添加了result.UsePostTunneling = true;。 并且它的工作服务器端也很糟糕。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    相关资源
    最近更新 更多