为啥设置 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的主要内容,如果未能解决你的问题,请参考以下文章