使用来自 .Net 2.0 和 .Net 4.5 的 JSON Web 服务

Consuming a JSON Web Service from .Net 2.0 and .Net 4.5

我已经使用 .Net 4.5 和 RestSharp 创建了一个 Web 服务。该服务最初将有两个客户端使用它:一个也使用 .Net 4.5 和 RestSharp,另一个暂时停留在 .Net 2.0 和 WebClient 上(因为 RestSharp 不支持 .Net 2.0) .

我可以通过以下操作成功响应来自 .Net 4.5 客户端的调用:

[HttpPost]
public IRestResponse<CustomMessageResponseType> Send([FromBody]string message)
{
    //action code here;
}

但是,这会导致 message 在被 .Net 2.0 客户端调用时具有 null 值。通过将操作签名更改为(注意消息参数类型的更改),我能够成功响应来自 .Net 2.0 客户端的调用:

[HttpPost]
public IRestResponse<CustomMessageResponseType> Send([FromBody]CustomMessageType message)
{
    //action code here;
}

但这会在 .Net 4.5 客户端调用时导致 messagenull 值。

我也试过将这两个动作都包含在控制器中并依靠签名自动区分它们,但这导致两者都没有被调用。

在 .Net 2.0 客户端中,我是这样调用服务的:

private string Send(CustomMessageType message)
{
    var request = new WebClient { BaseAddress = API.ToString(), Encoding = Encoding.UTF8 };
    request.Headers[HttpRequestHeader.ContentType] = "application/json";
    request.Headers[HttpRequestHeader.Accept] = "application/json";
    var content = JsonConvert.SerializeObject(message);
    var response = request.UploadString("Message", content);
    return response;
}

消息包含如下内容:

{
    "Subject":"Test Message",
    "Body":"This is a test message.",
    "Recipients":
    [{
        "FirstName":"John",
        "LastName":"Doe",
        "Name":"John Doe",
        "RecipientID":"1",
        "ContactPoints":
        {
            "Email":"John.Doe@example.com",
            "Phone":null,
            "Text":null
        }
    }],
    "Sender":
    {
        "FirstName":"Test Account",
        "LastName":null,
        "Name":"Test Account",
        "RecipientID":null,
        "ContactPoints":
        {
            "Email":null,
            "Phone":"5555551234",
            "Text":null
        }
    }
}

谁能帮我弄清楚如何为这两个客户提供服务?

问题最终出现在我的原始代码中(不是总是这样吗?)。 .Net 4.5 客户端发送的 JSON 数据实际上被双重转义。我将对象序列化为 JSON,然后将其传递给 RestSharp 的 AddBody 方法,该方法需要一个反序列化的对象,因此它再次对其进行序列化,这相当于转义了所有转义字符。好处是 .Net 2.0 客户端不再需要使用 RestSharp-.NET-2.0-Fork,我可以使用我非常喜欢的强类型操作参数。

再次感谢您在完成此@dbarnes 过程中提供的所有帮助。对于长期 reader 的初次调查官来说,这是一次很棒的初次体验。