我正在嘗試使用servicestack進行簡單的api post調用,並且它一直拋出異常「未找到」。當使用web瀏覽器休息api直接對api進行相同的郵寄呼叫時,郵遞員,api電話工程。ServiceStack JsonServiceClient使用路由屬性發送拋出異常未找到
我裝飾了我的請求對象與路由屬性
[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.ServiceCl ient.Web.WebServiceException}在 ServiceStack.ServiceClient.Web.ServiceClientBase.ThrowWebServiceException [τ響應](例外 前,字符串requestUri)在 ServiceStack.ServiceClient.Web.ServiceClientBase.ThrowResponseTypeException [τ響應(對象 請求,異常前,串requestUri)在 ServiceStack.ServiceClient.Web.ServiceClientBase.HandleResponseException [τ響應](例外 前,對象請求,串requestUri,函數功能 GETRESPONSE,τ響應&響應)在 ServiceStack.ServiceClient.Web.ServiceClientBase.Send [ TResponse](Object request)at ApiService`2.Post(String path,TPa頂杆體)在 ApiService.cs:線81
上在servicestack新的API的文檔中提到使用路由的屬性裝飾請求DTO和使用IReturn的而是從看後面的代碼發送方法,它是從請求的名稱中找出剩餘的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異常?
僅供參考 - PredefinedRoutes應該默認啓用,如此處所述(https://github.com/ServiceStack/ServiceStack/wiki/Plugins#list-of-plugins-added-by-default) – paaschpa 2013-03-25 16:22:27