【问题标题】:jsonp response gives error html along with padded json after upgrading to .Net framework 4.8升级到 .Net 框架 4.8 后,jsonp 响应会给出错误 html 以及填充的 json
【发布时间】:2022-01-05 15:07:21
【问题描述】:

之前我的 WebApplication 在 .Net Framework 4.5.2 上工作。升级到 4.8 后,应用程序间歇性地在 jsonp 响应中附加一个奇怪的 HTML 错误。 API 中没有记录错误。 jquery 每次都从 WCF WebAPI 接收状态为 200 的 json 响应。我们在 WCF 中有自定义 Web API,它们在从 Google API 获取数据后给出 json 响应。

$.ajax({
    type: 'GET',
    url: GoogleDataSourceServiceUrl,
    async: false,
    crossDomain: true,
    timeout: 90000,
    dataType: 'jsonp',
    jsonp: 'callback',
    jsonpCallback: 'jsonCallbackgoogle',
    beforeSend: function () {
        $("#GooglePreLoader").show();
        $('#GoogleResults').html("");

    },
    success: function (data) {
        processGoogleRes(data);
        $("#hidden_google_id").val(0);
        $(".pagination a").on("contextmenu",function(){
           return false;
        }); 
    },

    error: function (x, t, m) {
        if (t === "timeout") {
            $("#GooglePreLoader").hide();
            $('#GoogleResults').append("Request Timeout");
        }
        else if (t === "parsererror") {
            $("#GooglePreLoader").hide();
            $('#GoogleResults').append("Unable to contact App");
        }

        $("#hidden_google_id").val(0);
        
    }
});

间歇性错误响应如下:

jsonCallbackgoogle("{\"results\":[{\"title\":\" ...., ...\"}],\"_total\":33}");

<!DOCTYPE html>
<html>
    <head>
        <title>Runtime Error</title>
        <meta name="viewport" content="width=device-width" />
        <style>
         body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;} 
         p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
         b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
         H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
         H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
         pre {font-family:"Consolas","Lucida Console",Monospace;font-size:11pt;margin:0;padding:0.5em;line-height:14pt}
         .marker {font-weight: bold; color: black;text-decoration: none;}
         .version {color: gray;}
         .error {margin-bottom: 10px;}
         .expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:pointer; }
         @media screen and (max-width: 639px) {
          pre { width: 440px; overflow: auto; white-space: pre-wrap; word-wrap: break-word; }
         }
         @media screen and (max-width: 479px) {
          pre { width: 280px; }
         }
        </style>
    </head>

    <body bgcolor="white">

            <span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>

            <h2> <i>Runtime Error</i> </h2></span>

            <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">

            <b> Description: </b>An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.
            <br><br>

            <b>Details:</b> To enable the details of this specific error message to be viewable on remote machines, please create a &lt;customErrors&gt; tag within a &quot;web.config&quot; configuration file located in the root directory of the current web application. This &lt;customErrors&gt; tag should then have its &quot;mode&quot; attribute set to &quot;Off&quot;.<br><br>

            <table width=100% bgcolor="#ffffcc">
               <tr>
                  <td>
                      <code><pre>

&lt;!-- Web.Config Configuration File --&gt;

&lt;configuration&gt;
    &lt;system.web&gt;
        &lt;customErrors mode=&quot;Off&quot;/&gt;
    &lt;/system.web&gt;
&lt;/configuration&gt;</pre>                      </code>

                  </td>
               </tr>
            </table>

            <br>

            <b>Notes:</b> The current error page you are seeing can be replaced by a custom error page by modifying the &quot;defaultRedirect&quot; attribute of the application&#39;s &lt;customErrors&gt; configuration tag to point to a custom error page URL.<br><br>

            <table width=100% bgcolor="#ffffcc">
               <tr>
                  <td>
                      <code><pre>

&lt;!-- Web.Config Configuration File --&gt;

&lt;configuration&gt;
    &lt;system.web&gt;
        &lt;customErrors mode=&quot;RemoteOnly&quot; defaultRedirect=&quot;mycustompage.htm&quot;/&gt;
    &lt;/system.web&gt;
&lt;/configuration&gt;</pre>                      </code>

                  </td>
               </tr>
            </table>

            <br>

            </font>

    </body>
</html>


我在 WCF WebAPI 或 Asp.Net Web 应用程序中都没有看到任何错误。

这是我的 WCF 服务配置:

<system.serviceModel>
    <diagnostics>
      <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="false" maxSizeOfMessageToLog="134217728"/>
    </diagnostics>
    <services>
      <service behaviorConfiguration="ServiceBehaviour" name="WcfOcRestService.OcService">
        <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="webHttpsBindingWithJsonP" contract="WcfOcRestService.IOcService"/>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehaviour">
          <serviceMetadata httpsGetEnabled="True" policyVersion="Policy12"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="web">
          <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
          <webHttp helpEnabled="True" automaticFormatSelectionEnabled="True"/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <webHttpBinding>
        <binding name="webHttpsBindingWithJsonP" crossDomainScriptAccessEnabled="true" transferMode="Streamed">
          <security mode="Transport"/>
        </binding>
      </webHttpBinding>
    </bindings>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/>
</system.serviceModel>

【问题讨论】:

    标签: jquery asp.net wcf jsonp webapi


    【解决方案1】:

    在WCF项目的web.config文件中,确保你有crossDomainScriptAccessEnabled="true"属性,你也可以尝试在下面的帖子中找到解决方案。

    <webHttpBinding>
            <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
    </webHttpBinding> 
    

    jQuery $.ajax call for cross domain with JSONP, returns status 200, but error function is being called instead of success

    Consuming a WCF Service in jQuery via AJAX Call in a different Project (Cross Domain)

    jQuery ajax (jsonp) ignores a timeout and doesn't fire the error event

    【讨论】:

    • 感谢您的回复。此属性已添加。使用服务配置进行编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    相关资源
    最近更新 更多