1

我有一个 ServiceStack REST 服务(PUT 和 POST),我用 fiddler 测试过,如果没有出现错误,我会返回

new HttpResult(HttpStatusCode.OK); 

现在我正在使用服务堆栈客户端测试相同的 REST 服务,我有:

var client = new XmlServiceClient("url"));
client.Post<ChangeServerLicenseDto>("", new ChangeServerLicenseDto()
         {ServerName = model.ServerName});

当我这样做时,我得到了 REST 服务的异常

    return new HttpResult(HttpStatusCode.OK)

并且引发的错误是:

      500 (Error in line 1 position 76. Expecting element 'ChangeServerLicense'
      from namespace ''.. Encountered 'Element'  with name 'HttpStatusCode',
      namespace 'http://schemas.datacontract.org/2004/07/System.Net'.) 

我的客户端代码在 MVC 操作方法 (POST) 中。

我的 RestService 数据合同是:

[DataContract(Name = "ChangeServerLicense", Namespace = "")]
[RestService("url", "POST", "application/xml")]
public class ChangeServerLicenseDto
{
    [DataMember(Name = "ServerName", Order = 1)]
    public string ServerName { get; set; }
}
4

1 回答 1

1

发出成功响应信号的约定是返回一个空的 Response DTO(默认情况下返回 200 OK)。也Send<TResponse>(...)做一个 POST 所以如果你不想在请求中包含 url,使用Send它将POST请求到自动预定义的路由

var client = new XmlServiceClient("url"));
client.Send<ChangeServerLicenseDtoResponse>(
    new ChangeServerLicenseDto {ServerName = model.ServerName});

否则,如果您仍想使用.Post<T>(...)包含挂载您的服务的自定义路由的 URL。

注意:我通常不喜欢Dto在 DTO 上使用后缀,这是您的服务中最重要的 API - 我在这里更详细地解释了原因

于 2012-06-04T15:29:03.380 回答