我正在尝试使用 servicestack 进行简单的 api post 调用,并且它不断抛出“未找到”异常。当使用 web 浏览器 rest api(例如邮递员)直接对 api 进行相同的 post 调用时,api 调用有效。
我用路由属性装饰了我的请求对象
[Route("/register", "POST")]
public class Register : IReturn<RegistrationResponse>
{
public DateTime? BirthDate { get; set; }
public string Continue { get; set; }
public string Email { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Gender { get; set; }
public string Password { get; set; }
}
JsonServiceClient 使用基本 uri 初始化,但以下调用失败
_client = new JsonServiceClient(_apiUri);
_client.HttpMethod = HttpMethods.Post;
var response = _client.Send(body);
我发现的例外是:
$exception {"Not Found"} System.Exception {ServiceStack.ServiceClient.Web.ServiceClientBase.ThrowWebServiceException[TResponse](Exception ex, String requestUri) at ServiceStack.ServiceClient.Web.ServiceClientBase.ThrowResponseTypeException {ServiceStack.ServiceClient.Web.WebServiceException} ServiceStack.ServiceClient.Web.ServiceClientBase.HandleResponseException [TResponse](对象请求,异常前,字符串 requestUri)[TResponse](异常前,对象请求,字符串 requestUri,Func
1 createWebRequest, Func
2 getResponse,TResponse& 响应)在 ServiceStack.ServiceClient.Web。 ServiceClientBase.Send[TResponse](Object request) at ApiService`2.Post(String path, TParams body) in ApiService.cs:line 81
servicestack 上关于新 API 的文档提到了装饰请求 DTO 的 Route 属性的使用以及 IReturn 的使用,但是通过查看 Send 方法背后的代码,它正在从请求的名称中计算出其余的 api url ,这意味着您的请求 dto 不能命名为任何不同的名称。
public virtual TResponse Send<TResponse>(object request)
{
var requestUri = this.SyncReplyBaseUri.WithTrailingSlash() + request.GetType().Name;
var client = SendRequest(requestUri, request);
try
{
var webResponse = client.GetResponse();
return HandleResponse<TResponse>(webResponse);
}
catch (Exception ex)
{
TResponse response;
if (!HandleResponseException(ex,
request,
requestUri,
() => SendRequest(HttpMethods.Post, requestUri, request),
c => c.GetResponse(),
out response))
{
throw;
}
return response;
}
}
是什么导致 Not Found 异常?