我在VB .NET Web应用程序的工作。该项目面向.NET 4.0和IIS中运行。
我们与第三方应用程序的接口。我们正在使用SAML来显示我们的网站内的信息。他们要求请求URL是他们的基本URL加一个查询字符串,始终是围绕7,500 - 8,000个字符。
这工作正常,在Chrome,但在IE11的URL被切断刚刚超过4000个字符。我可以看到它在提琴手走出去喜欢,所以第三方是不负责截断。
不幸的是,我们需要支持IE11和Chrome。我们不支持任何其他的浏览器,包括早期版本的IE。 SAML响应被添加到像这样的网址:
Dim samlResponseStr As String = samlResponse.ToString()
Dim bytesToEncode() As Byte = Encoding.UTF8.GetBytes(samlResponseStr)
Dim encodedData As String = Convert.ToBase64String(bytesToEncode)
Dim strUrl As String = "https://training.com/SSO/NS/SAMLPatientDisplay.aspx?SAMLResponse=" & Server.UrlEncode(encodedData)
在这一点上,当然,无论strUrl我使用的浏览器是相同的。
我已经添加了以下到我的web.config:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxQueryString="100000" maxUrl="12288" />
</requestFiltering>
</security>
</system.webServer>
无论什么它能够在同一点切断。
有没有办法迫使IE11,让这个网址去了原来的样子?
谢谢!
编辑补充:或者,有没有办法缩短代码中的网址是什么?这些都是一次性的网址指向不超过初始请求有效,所以没有必要将其保存长久。
再次编辑:我不需要任何地方显示的网址 - 它并不需要出现在地址栏或加书签或任何东西。这似乎表明,较长的URL在IE是可能在某些情况下:https://blogs.msdn.microsoft.com/ieinternals/2014/08/13/url-length-limits/但我一直没能找到对任何更多的细节。
我能得到它的工作做:
Dim samlResponseStr As String = samlResponse.ToString()
Dim bytesToEncode() As Byte = Encoding.UTF8.GetBytes(samlResponseStr)
Dim encodedData As String = Convert.ToBase64String(bytesToEncode)
Dim strUrl As String = "https://training.com/SSO/NS/SAMLPatientDisplay.aspx?SAMLResponse=" & Server.UrlEncode(encodedData)
Response.Redirect(strUrl)
然后我有一个问题,因为之前的Response.Redirect任何客户端代码执行。我创建第二个.aspx页面中仅用于显示。除了Response.Redirect的所有代码恰好我原来的页面上,然后将URL发送到新的页面显示。
这部作品在IE11,Chrome浏览器,Firefox和边缘。