【发布时间】:2015-09-05 00:45:50
【问题描述】:
我正在尝试 ServiceStack 的内置身份验证。我的方法是'OrmLiteAuthRepository',因此用户的信息存储在 Sql Server 中,而不是默认存储在内存中。我使用 Postman 来测试端点。
我的目标是接收用户行、更新用户信息、创建用户、删除用户行。这些是我在导入后在 Postman 中找到的端点(我没有创建这些端点):
GET 'http://localhost:47391/api/register',
PUT 'http://localhost:47391/api/json/reply/Register'
POST 'http://localhost:47391/api/json/reply/Register'
我测试过 POST,Sql Server 自动创建了表来存储用户数据。并且数据可以写入Sql Server,所以我对POST没有问题。
但是使用 PUT,不是用于更新现有行吗?我将“/{id}”附加到末尾。但它在数据库中创建了一个新行,而不是更新现有行。它是如何工作的?
使用 GET,我没有遇到任何实施错误。
{
"ResponseStatus": {
"ErrorCode": "NotImplementedException",
"Message": "Could not find method named Get(Register) or Any(Register) on Service RegisterService",
"StackTrace": " at ServiceStack.Host.ServiceExec`1.Execute(IRequest request, Object instance, Object requestDto, String requestName)\r\n at ServiceStack.Host.ServiceRequestExec`2.Execute(IRequest requestContext, Object instance, Object request)\r\n at ServiceStack.Host.ServiceController.<>c__DisplayClass11.<>c__DisplayClass13.<RegisterServiceExecutor>b__10(IRequest reqCtx, Object req)\r\n at ServiceStack.Host.ServiceController.ManagedServiceExec(ServiceExecFn serviceExec, IService service, IRequest request, Object requestDto)\r\n at ServiceStack.Host.ServiceController.<>c__DisplayClass11.<RegisterServiceExecutor>b__f(IRequest requestContext, Object dto)\r\n at ServiceStack.Host.ServiceController.Execute(Object requestDto, IRequest req)\r\n at ServiceStack.HostContext.ExecuteService(Object request, IRequest httpReq)\r\n at ServiceStack.Host.RestHandler.GetResponse(IRequest request, Object requestDto)\r\n at ServiceStack.Host.RestHandler.ProcessRequestAsync(IRequest httpReq, IResponse httpRes, String operationName)"
}
}
如何实现?我假设我认为用户是一个普通的 Web 服务实体?并创建“UserService”,并请求如下:
[Route("/register")]
public class User : IReturn<UserResponse>
{
...
}
但是由于表是由 ServiceStack 自己创建的,所以没有像“用户”这样的模型类,如何解决这个问题? 或者有什么我不知道的。谢谢。
【问题讨论】:
标签: authentication servicestack