VB IE11 中的 .NET 第三方超长 URL
VB .NET Third-Party Extra-Long URL in IE11
我在开发 VB .NET 网络应用程序。该项目面向 .NET 4.0 并在 IIS 中运行。
我们有一个与第三方应用程序的接口。我们使用 SAML 在我们的网站中显示他们的信息。他们要求请求 URL 是他们的基础 URL 加上一个始终在 7,500 - 8,000 个字符左右的查询字符串。
这在 Chrome 中工作正常,但在 IE11 中 URL 被截断超过 4,000 个字符。我在Fiddler里看到就这样出来了,所以第三方不负责这个截断。
很遗憾,我们需要同时支持 IE11 和 Chrome。我们不必支持任何其他浏览器,包括早期版本的 IE。 SAML 响应被添加到 URL 中,如下所示:
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 按原样退出?
谢谢!
编辑添加:或者,有没有办法缩短代码中的 URL?这些是一次性 URLs,在初始请求之后无效,因此无需长期存储它们。
再次编辑:我不需要在任何地方显示 URL - 它不需要出现在地址栏中或添加书签或任何东西。这似乎表明在某些情况下 IE 中可能有更长的 URLs:
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 和 Edge。
我在开发 VB .NET 网络应用程序。该项目面向 .NET 4.0 并在 IIS 中运行。
我们有一个与第三方应用程序的接口。我们使用 SAML 在我们的网站中显示他们的信息。他们要求请求 URL 是他们的基础 URL 加上一个始终在 7,500 - 8,000 个字符左右的查询字符串。
这在 Chrome 中工作正常,但在 IE11 中 URL 被截断超过 4,000 个字符。我在Fiddler里看到就这样出来了,所以第三方不负责这个截断。
很遗憾,我们需要同时支持 IE11 和 Chrome。我们不必支持任何其他浏览器,包括早期版本的 IE。 SAML 响应被添加到 URL 中,如下所示:
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 按原样退出?
谢谢!
编辑添加:或者,有没有办法缩短代码中的 URL?这些是一次性 URLs,在初始请求之后无效,因此无需长期存储它们。
再次编辑:我不需要在任何地方显示 URL - 它不需要出现在地址栏中或添加书签或任何东西。这似乎表明在某些情况下 IE 中可能有更长的 URLs: 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 和 Edge。