Here's what I'm using:
JSAPI v3.20
ArcGIS Server 10.3
ASP.NET Proxy 1.1.0
ASP.NET 4.0
I am having an issue when printing a map using Print (Print | API Reference | ArcGIS API for JavaScript 3.20 ). This occurs only after entering an address into the Search widget, and then plotting the result - the request is blocked during any export attempt after this action.
The issue "Unexpected token <" results from the API expecting a JSON response, but getting an HTML page... the page in question is a custom error page capturing a Microsoft validation issue with "potentially dangerous content". Here's the request going through Fiddler:
<SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"mapOptions"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"showAttribution"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">false</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"extent"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"xmin"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">9758929.205244847</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"ymin"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">5153837.351343746</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"xmax"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">9757291.78077969</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"ymax"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">5155062.73245334</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"spatialReference"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"wkid"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">102100</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"latestWkid"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">3857</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"spatialReference"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"wkid"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">102100</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"latestWkid"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">3857</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"scale"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">4513.98870499674</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"operationalLayers"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"id"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"layer0"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"title"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"layer0"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"opacity"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"minScale"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">591657527.591555</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"maxScale"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">70.5310735</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"url"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token"><SPAN>"</SPAN><A class="jive-link-external-small" href="https://community.esri.com/external-link.jspa?url=https%3A%2F%2Fservices.arcgisonline.com%2FArcGIS%2Frest%2Fservices%2FCanvas%2FWorld_Light_Gray_Base%2FMapServer" target="_blank">https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer</A><SPAN>"</SPAN></SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"id"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"map_graphics"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"opacity"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"minScale"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"maxScale"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"featureCollection"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"layers"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"layerDefinition"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"name"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"pointLayer"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"geometryType"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"esriGeometryPoint"</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"featureSet"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"geometryType"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"esriGeometryPoint"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"features"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"geometry"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"x"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">9758110.34234326</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"y"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">5154449.96419052</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"spatialReference"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"wkid"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">102100</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"latestWkid"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">3857</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"attributes"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"Addr_type"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"StreetName"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"Match_addr"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"Main Ave, Chicago, Illinois, 60613"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"StAddr"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"Main Ave"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"City"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"Chicago"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"score"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">100</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"searchTheme"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"arcgisSearch"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"searchResult"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"Main Ave, Chicago, Illinois, 60613"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"searchMoreResults"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"moreResults"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"searchMoreResultsItem"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"moreItem"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"searchMoreResultsId"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"search_more_results"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"searchMoreResultsHtml"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">""</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"symbol"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"angle"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"xoffset"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">6.75</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"yoffset"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">13.5</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"type"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"esriPMS"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"url"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token"><SPAN>"</SPAN><A class="jive-link-external-small" href="https://community.esri.com/external-link.jspa?url=https%3A%2F%2Fjs.arcgis.com%2F3.20%2Fesri%2Fdijit%2FSearch%2Fimages%2Fsearch-pointer.png" target="_blank">https://js.arcgis.com/3.20/esri/dijit/Search/images/search-pointer.png</A><SPAN>"</SPAN></SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"width"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">27</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"height"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">27</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"infoTemplate"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"title"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"Search result"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"content"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"<div class=\"${searchTheme}\"><div id=\"${searchMoreResultsId}\" class=\"${searchMoreResults}\"><div class=\"${searchMoreResultsItem}\">${searchResult}</div><div>${searchMoreResultsHtml}</div></div></div>"</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"id"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"layer1"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"title"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"layer1"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"opacity"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"minScale"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">591657527.591555</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"maxScale"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">70.5310735</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"url"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token"><SPAN>"</SPAN><A class="jive-link-external-small" href="https://community.esri.com/external-link.jspa?url=https%3A%2F%2Fservices.arcgisonline.com%2FArcGIS%2Frest%2Fservices%2FCanvas%2FWorld_Light_Gray_Reference%2FMapServer" target="_blank">https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer</A><SPAN>"</SPAN></SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"exportOptions"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"outputSize"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="number token">800</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="number token">1100</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"dpi"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="number token">96</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"layoutOptions"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"titleText"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"My map title"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"copyrightText"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"My map copyright text"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"scaleBarOptions"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"metricUnit"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"esriKilometers"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"metricLabel"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"km"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"nonMetricUnit"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"esriMiles"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"nonMetricLabel"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"mi"</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"legendOptions"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN>
<SPAN class="string token">"operationalLayers"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>...it appears the info window content HTML is the culprit. In my proxy web.config, if I revert validation to 2.0:
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>httpRuntime</SPAN> <SPAN class="attr-name token">requestValidationMode</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>2.0<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="punctuation token">/></SPAN></SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN></SPAN>
...the request works. This is because .NET 2.0 only validates page requests, whereas 4.0 validates ALL HTTP requests. I'd like to call it a day and just implement the web.config change, but I'm wary about making such a modification due to XSS/security concerns. I thought about maybe encoding/decoding, but there doesn't seem to be a way to do this without modifying the JSAPI directly.
Anyone have any ideas? Geonet is pretty quiet about this issue... Is it a bug? Print works fine otherwise!
Thank you!