Webservice报错客户端发现响应内容类型为“application/json;charset=UTF-8”,但应为“text/xml”。

时间:2022-01-10 14:16:32

控制台对接Webservice正常,同样的方法在Web项目上报错:

客户端发现响应内容类型为“application/json;charset=UTF-8”,但应为“text/xml”。
请求失败,错误信息为:
--
{
 "code" : "03010250002",
 "msg" : "Illegal json string",
 "data" : ""
}
--.

说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidOperationException: 客户端发现响应内容类型为“application/json;charset=UTF-8”,但应为“text/xml”。
请求失败,错误信息为:
--
{
 "code" : "03010250002",
 "msg" : "Illegal json string",
 "data" : ""
}
--.

按照网上的资料找到的方法:

1、重写代理类的请求或响应的方法

在代理类中重写GetWebResponse方法来设置响应的ContentType:

        protected override System.Net.WebResponse GetWebResponse(System.Net.WebRequest request)
{
var response = base.GetWebResponse(request);
if (response.ContentType == "application/json;charset=UTF-8")
response.ContentType = "text/xml";
return response;
} protected override System.Net.WebResponse GetWebResponse(System.Net.WebRequest request, IAsyncResult result)
{
var response = base.GetWebResponse(request,result);
if (response.ContentType == "application/json;charset=UTF-8")
response.ContentType = "text/xml";
return response;
}

调试报错:

该类未实现此属性。

说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.NotImplementedException: 该类未实现此属性。

源错误:

行 39:             var response = base.GetWebResponse(request);
行 40: if (response.ContentType == "application/json;charset=UTF-8")
行 41: response.ContentType = "text/xml";
行 42: return response;
行 43: }

重写请求方法GetWebResponse

        protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
System.Net.WebRequest request = base.GetWebRequest(uri);
request.ContentType = "text/xml";
return request;
}

结果还是报错:客户端发现响应内容类型为“application/json;charset=UTF-8”,但应为“text/xml”。

后来调试发现是URL写错了,因是用vs的开发命令工具生成的代理类,手动设置的URL,设置错误导致。

SOAPUI生成的代理类也一样要注意URL,URL对了就正常了。

顺便附上用vs的开发命令工具生成代理类的方法,其实就是调用了wsdl.exe 生成代理类

打开vs开发控制台

wsdl /language:c# /n:命名空间 /out:D:/SOAPUI_CS/类名.cs wsdl文件地址

SoapUI生成代理类方法

Webservice报错客户端发现响应内容类型为“application/json;charset=UTF-8”,但应为“text/xml”。

Webservice报错客户端发现响应内容类型为“application/json;charset=UTF-8”,但应为“text/xml”。