调试Web服务时,我可以使用提供的默认WSDL接口测试函数,该接口允许我输入参数的某些值。这非常方便,但只输出XML。是否有可能在此阶段启用更多选项? (JSON,CSV)
或者如果那是不可能的,我想在API调用filetype=[json,csv]
中添加一个额外的参数,但是如何以该格式写回来?我把它作为字符串传递吗?
答案 0 :(得分:2)
我假设您正在使用WCF。您可以通过几种简单的方法在XML或JSON结果之间进行选择。一个是拥有不同的端点,另一个是拥有不同的方法。第二个选项可以满足您在API调用中包含参数的请求,但我将简要介绍两者。考虑以下端点:
<endpoint address="/rest/" behaviorConfiguration="web" binding="webHttpBinding" contract="WebApplication1.Interface.ITestRest" />
<endpoint address="/json/" behaviorConfiguration="web" binding="webHttpBinding" contract="WebApplication1.Interface.ITestJson" />
<endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" contract="WebApplication1.Interface.ITestBoth" />
前两个与选项1相关,用于区分端点(/ rest /或/ json /将在方法之前的url中,并且两个接口都可以定义相同的签名,因此它只能实现一次)。最后一个涉及选项2在接口上有两个方法。以下是上述接口的一组示例:
[ServiceContract]
public interface ITestJson
{
[OperationContract, WebInvoke(Method = "GET", UriTemplate = "/Echo/{Text}",
RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
string Echo(string Text);
}
[ServiceContract]
public interface ITestRest
{
[OperationContract, WebInvoke(Method = "GET", UriTemplate = "/Echo/{Text}",
RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
string Echo(string Text);
}
[ServiceContract]
public interface ITestBoth
{
[OperationContract, WebInvoke(Method = "GET", UriTemplate = "/Echo?Text={Text}&Format=json",
RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
string EchoJ(string Text);
[OperationContract, WebInvoke(Method = "GET", UriTemplate = "/Echo?Text={Text}&Format=xml",
RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
string EchoR(string Text);
}
然后是一个实现这个的类:
public class Signature : ITestJson, ITestRest, ITestBoth
{
public string Echo(string Text)
{
return Text;
}
public string EchoR(string Text)
{
return Text;
}
public string EchoJ(string Text)
{
return Text;
}
现在您可以通过以下方式使用它:
Service1.svc/json/echo/xxx
Service1.svc/rest/echo/xxx
Service1.svc/echo?Text=xxx&Format=json
Service1.svc/echo?Text=xxx&Format=rest
正如我在开始时所说,这些是选择XML或Json的几种简单方式。您的请求也要求提供CSV。目前没有简单的方法来返回CSV。我确实在CodePlex上找到了可以返回TXT的this项目,但我没有检查过它。
答案 1 :(得分:1)
我建议使用ASP.NET MVC 3并创建一个返回JsonResult的操作。此Action可以执行您的WebMethod并将结果序列化为JSON。 (这仅适用于JSON)。
为了获得更大的灵活性,您可以使用ASP.NET(Web窗体)通用处理程序,它可以让您对响应类型和内容进行大量控制。
您还可以考虑ASP.NET MVC 4中的Web API功能。它支持广泛的请求和响应格式。
此堆栈溢出线程触及JsonResult与Web API:MVC4 Web API or MVC3 JsonResult