【问题标题】:How can I accept Json string in WCF Post without using class如何在不使用类的情况下接受 WCF Post 中的 Json 字符串
【发布时间】:2019-09-03 06:06:13
【问题描述】:

我有一个需要被 WCF Post 方法接受的 json 字符串。我已经使用类来接受请求并且工作正常。但我想在不使用类的情况下动态接受请求。我可以使用字符串、Jobject 或任何其他数据类型来接受相同的吗?

我的帖子方法。使用流和字符串时我得到空值

[OperationContract(Name = "PostResponse")]
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "PostJsonResponse?Plugin={plugin}&Action={action}", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]      
    Stream PostJsonResponse(String plugin, String action, Stream jsonStr);

JSON 字符串。我们要在 Post 方法中将下面的 json 数据绑定到 jsonStr(Parameter)

{"short_description":"BF INC 008489","description":"","u_issue":"Paper Jam","business_service":"Printer and Copier Devices","impact":"3","urgency":"3"}

【问题讨论】:

  • 您的问题尚不清楚,无论如何,如果您想传递单个字符串,则在您的方法中使用字符串 yourVariableName 作为参数,但从您上传的图像来看,您似乎需要一个 Class 类型。目前的做法没有错

标签: c# wcf


【解决方案1】:

您可以使用流或字符串来做到这一点

public bool PostString(string json)
{
    Model model = JsonConvert.DeserializeObject<Model>(json);
    return true;
}

public bool PostStream(Stream value)
{
    // Read the stream into a string
    string json;

    using(var streamReader = new StreamReader(stream))
    {
        json = streamReader.ReadToEnd();
    }     

    // Deserialise string to object       
    Model model = JsonConvert.DeserializeObject<Model>(json);

    return true;
}

话虽如此,WCF 确实用于强类型对象......通常每当我看到使用流作为参数的代码时,它可以是强类型的,这通常是开发人员无法弄清楚的一个迹象如何使 WCF 工作。

【讨论】:

【解决方案2】:

您似乎想上传文件流,还想提交其他文本内容。但实际上,这个接口不符合WCF的定义,即使编译正确,也无法正常工作。当请求参数包含流类型参数时,参数列表中不允许有其他类型的参数。所以这个功能是不可能实现的。
这个应用场景通常是在我们提交一个Form数据的时候实现的。 Restful 样式的 WCF 服务不支持表单数据。
[https://stackoverflow.com/questions/57386814/wcf-service-call-to-upload-image-from-angular/57391618#57391618]1
我建议你使用 Asp.net WebAPI 来接受 multipart-data(form-data)。
https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/sending-html-form-data-part-2
如果有什么我可以帮忙的,请随时告诉我。

【讨论】:

  • 我已经更新了我的问题。我添加了我正在传递的 json 请求
  • 我没有上传图片
  • 当我们有流类型参数时,我们不能在函数签名中添加其他参数。您可以通过访问服务信息页面来检查服务是否运行良好。如果参数都是String类型,我们可以上传JSON格式的数据,就像你做的那样。
猜你喜欢
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多