【问题标题】:What is correct format for WCF PUT request?WCF PUT 请求的正确格式是什么?
【发布时间】:2013-10-29 16:26:20
【问题描述】:

我正在努力以它期望的格式向 WCF 发送 PUT 请求。我在想我可以像使用 QueryString 的 GET 一样发送它,但这只会消除错误。

    //Put operation
    [OperationContract]
    [WebInvoke(UriTemplate = "?tid={transcriptId}&qId={quizId}&cid={choice}&mid={mbox}&status={status}", Method = "PUT", RequestFormat=WebMessageFormat.Json)]
    vTranscript UpdateTranscript(string transcriptId, string quizId, string choice, string mbox, string status);

我还尝试使用 CURL 作为 XML 和 JSON 文件发送,但服务未获取这些文件中的值(值为 null)。

[DataContract]
public class vTranscript
{
    [DataMember]
    public bool validUser;
    [DataMember]
    public bool correctAnswer;
    [DataMember]
    public bool recorded;
  }

我假设我的 vTranscript 不必必须匹配我传入的参数,尽管我什至尝试过。

我不确定我做错了什么。任何建议将不胜感激。谢谢。

【问题讨论】:

    标签: c# wcf rest put


    【解决方案1】:

    尝试如下设置bodystyle。

     [WebInvoke(Method = "PUT", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    

    【讨论】:

    • 谢谢,这也很有帮助。
    【解决方案2】:

    假设您的所有参数都已发布,您只需要以下内容:(注意发布的名称必须与方法参数名称匹配)

    //Put operation
    [OperationContract]
    [WebInvoke(Method = "PUT", RequestFormat=WebMessageFormat.Json)]
    vTranscript UpdateTranscript(string transcriptId, string quizId, string choice, string mbox, string status);
    

    UriTemplate 是定义嵌入在 url 本身中的参数。

    【讨论】:

    • 感谢您的帮助。那行得通,但是现在我收到“不允许使用 405 方法”。当我用谷歌搜索错误消息时,这似乎有很多可能的原因。我在 VS2010 中运行所有东西,所以我怀疑它是否与我一直看到的跨域问题有关。
    • 默认情况下禁用 PUT 和 DELETE 动词。此线程 (stackoverflow.com/a/10907343/2711582) 提供了有关如何启用它们的信息。客户端的一种解决方法是执行 POST 并添加 X-HTTP-Method-Override 标头以指定实际动词。
    • 在处理了更多之后,我能够解决这个问题。我将我的 JSON 包装为 JSON 数组,而不是简单的 JSON 字符串。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    相关资源
    最近更新 更多