一尘不染

WCF BodyStyle WrappedRequest不适用于传入的JSON参数吗?

json

我一直在努力获取RESTful WCF服务,以接受JSON作为参数并返回一些JSON。

这是我的服务:

    [OperationContract]
    [WebInvoke(
        Method="POST",
        BodyStyle = WebMessageBodyStyle.WrappedRequest,
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json,
        UriTemplate = "Authenticate")]
    public AuthResponse Authenticate(AuthRequest data)
    {
        AuthResponse res = new AuthResponse();
        if (data != null)
        {
            Debug.WriteLine(data.TokenId);
            res.TokenId = new Guid(data.TokenId);
        }
        return res;
    }

当我通过{AuthRequest:{TokenId =“ some guid”}}时,上述方法会将 数据 设置为null。

如果我将方法的BodyStyle设置为Bare,则 数据
设置正确,但是我必须从JSON中删除{AuthRequest}(我并不是很想这样做)。有什么方法可以使WrappedRequests与{AuthRequest:{TokenId
=“ some guid”}}一起使用作为JSON?

谢谢。


阅读 283

收藏
2020-07-27

共1个答案

一尘不染

包装器的名称不是参数 类型 ,而是参数 名称 。如果您发送它,{"data":{"TokenId":"some guid"}}它应该可以工作。

或者,如果要使用参数名称以外的其他名称,则可以使用[MessageParameter]属性:

[OperationContract]
[WebInvoke(
    Method="POST",
    BodyStyle = WebMessageBodyStyle.WrappedRequest,
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json,
    UriTemplate = "Authenticate")]
public AuthResponse Authenticate([MessageParameter(Name = "AuthRequest")] AuthRequest data)
2020-07-27