gpt4 book ai didi

c# - ServiceStack JsonServiceClient 使用路由属性发送抛出异常未找到

转载 作者:太空宇宙 更新时间:2023-11-03 13:45:07 25 4
gpt4 key购买 nike

我正在尝试使用 servicestack 进行简单的 api post 调用,但它一直抛出“未找到”异常。当使用网络浏览器 rest api 直接对 api 进行相同的 post 调用时,例如 postman ,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.WebServiceException} at ServiceStack.ServiceClient.Web.ServiceClientBase.ThrowWebServiceException[TResponse](Exception ex, String requestUri) at ServiceStack.ServiceClient.Web.ServiceClientBase.ThrowResponseTypeException[TResponse](Object request, Exception ex, String requestUri) at ServiceStack.ServiceClient.Web.ServiceClientBase.HandleResponseException[TResponse](Exception ex, Object request, String requestUri, Func1 createWebRequest, Func2 getResponse, TResponse& response) at ServiceStack.ServiceClient.Web.ServiceClientBase.Send[TResponse](Object request) at ApiService`2.Post(String path, TParams body) in ApiService.cs:line 81

servicestack 上关于新 API 的文档提到了使用 Route 属性装饰请求 DTO 和 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 异常?

最佳答案

Register 类中的所有内容看起来都是正确的。

对于您的客户电话,我会将其更改为

_client = new JsonServiceClient(_apiUri);
_client.Post(new Register()); //assuming you can map your 'body' variable to a Register class

只是为了丢失额外的代码行。

它正在根据请求的名称计算出其余的 api url,这意味着您的请求 dto 不能命名为任何不同的名称。

它正在计算其余 api 将命中的端点。一旦到达端点,ServiceStack 的内部应该根据操作(在本例中为注册)和 Http 方法处理路由。基本上它会尝试找到一个将请求对象(注册)作为参数的服务类(任何继承服务标记接口(interface)的类),并且它将使用 Http 方法作为要调用的“函数”。

是什么导致了 Not Found 异常?

这个不太确定。如果您可以提供“服务”类,它可能会有所帮助。

如果你有一个像

这样的服务类
public class RegisterService : Service
{
public RegistrationResponse Post(Register request)
{
//service code
return new RegistrationResponse();
}
}

路由应该可以工作。

关于c# - ServiceStack JsonServiceClient 使用路由属性发送抛出异常未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15616129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com