为啥设置 WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Redirect 会导致 SecurityE

Posted

技术标签:

【中文标题】为啥设置 WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Redirect 会导致 SecurityException?【英文标题】:Why does setting WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Redirect cause SecurityException?为什么设置 WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Redirect 会导致 SecurityException? 【发布时间】:2012-08-19 02:03:39 【问题描述】:

我正在 .Net 4 中开发 Rest Service,我需要执行重定向。

对我正在做的事情的一点描述:我有一个包含一个按钮的 silverlight 应用程序。当我单击该按钮时,我会向我的 REST 服务发送一个带有一些信息的 POST 请求。根据这些信息,我创建了一个 URL 并(尝试)重定向浏览器。这是服务中方法的代码:

[WebInvoke(Method = "POST", UriTemplate = "OpenBinder")]
public void OpenBinder(int someId)

    string url = getUrl(someId);
    if (WebOperationContext.Current != null)
    
        WebOperationContext.Current.OutgoingResponse.Location = url;
        WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Redirect;
    

这似乎执行正确,但是当我在客户端调用 EndGetResponse 时,我看到发生了“安全错误”。这是 System.Security.SecurityException,但我没有得到比这更多的细节。关于这里可能发生什么的任何想法?

【问题讨论】:

不能直接设置代码-见social.msdn.microsoft.com/Forums/en/adodotnetdataservices/… 这是不正确的。否则他们不会在属性上暴露设置器,尽管我明白你的意思。 【参考方案1】:

如果没有更多信息,我不确定您的具体安全错误是什么,但通常在这种情况下,您的重定向应该发生在客户端的响应处理程序中。你能重组你的代码让客户端重定向吗?

【讨论】:

客户端重定向会更好,我同意,但是,url 中的数据是敏感的,我们宁愿不要传递它超过我们需要的。【参考方案2】:

好的,所以我的代码实际上工作正常。当我查看 Fiddler 时,我注意到它正在向 Url 发出正确的请求。问题是 clientacesspolicy.xml 正在阻止它。

【讨论】:

以上是关于为啥设置 WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Redirect 会导致 SecurityE的主要内容,如果未能解决你的问题,请参考以下文章

WCF 上的 CORS - 为啥在请求来自客户端机器时指定 Web 服务器?

wcf post 方法如何从传入请求中获取标头?

如何从基于 REST 的 WCF 服务中读取授权标头?

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥要设置原型构造函数?

为啥我的 Entity Framework Code First 代理集合为空,为啥我不能设置它?