【问题标题】:Generic Type WebMethod in web serviceWeb服务中的通用类型WebMethod
【发布时间】:2016-06-22 08:37:46
【问题描述】:

我需要编写一个通用类型的网络方法,因为我将返回字符串或 XmlDocument。有我的代码;

[WebMethod]
public T test<T>()
{

    var type = Context.Request.QueryString["type"];

    if (type == "json")
    {
        string result = "";
        return result;
    }
    else
    {
        XmlDocument result = new XmlDocument();
        return result;
    }

}

错误是:

无法将字符串转换为 T 或 XmlDocument 转换为 T。

这里有什么错误?

【问题讨论】:

  • 编译器事先并不知道你在调用这个方法的时候会给他什么类型。如果你想返回它,你需要一个变量T result
  • 你可以返回一个对象而不是一个特定的类型。
  • 你想做什么?序列化由框架基于配置和 well-known 标头(如content-type)执行。另一方面,Web 方法定义了众所周知的和已定义的 操作,它们不能是通用的。在这种情况下,他们不需要。如果 request 正确发出,相同的方法可以返回 Json 或 SOAP
  • 我想要一个返回 json 或 xml 的 web 方法。这个 webmethod 会像 ../..asmx/testmethod?type=json 一样被调用。我该怎么做?任何建议都可以。 @PanagiotisKanavos
  • 只需检查框架文档并按照框架 想要的方式进行操作。如果您忽略标准的Accept: application/json 请求标头,客户会非常恼火。否则,您必须创建自定义绑定/序列化程序并配置您的端点以使用它们 - 这就是将您返回的任何内容转换为 JSON 或 SOAP

标签: c# web-services generics asmx webmethod


【解决方案1】:

你不能在网络服务中使用泛型方法

【讨论】:

  • 对这个问题有什么建议吗?我想从查询字符串中获取类型并想返回这个类型?
  • @AdemBüyük 问题出在设计本身。没有所谓的“通用”Web 服务。它们都有契约模式,暴露在 WSDL 中。如果你不知道类型,你就不能这样做。 BTW WCF 已经支持根据请求返回 SOAP 或 JSON。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多