【问题标题】:ServiceStack implemente CRUD on UserAuth table generated by AuthenticationServiceStack 在 Authentication 生成的 UserAuth 表上实现 CRUD
【发布时间】: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


    【解决方案1】:

    错误信息:

    Could not find method named Get(Register) or Any(Register) on Service RegisterService
    

    是说你试图调用内置的 ServiceStack Register 服务而不是你的服务。但是 Register 服务默认情况下没有启用,您的 AuthFeature 可能会明确启用它,无论是:

    Plugins.Add(new RegistrationFeature());
    

    或者在 AuthFeature 上:

    Plugins.Add(new AuthFeature(...) {
        IncludeRegistrationService = true
    });
    

    如果您不想启用 ServiceStack 的内置注册服务,则需要在启用它的位置删除注册。

    如果您希望注册服务注册在不同的路径,您可以指定不同的路由:

    Plugins.Add(new RegistrationFeature {
        AtRestPath = "/servicestack-register"
    });
    

    【讨论】:

    • 感谢您的快速回复。我实际上有 Plugins.Add(new RegistrationFeature());在 AppHost.cs 中。 POST 工作正常,但尝试 GET 时出错。
    • 我的意思是我想使用ServiceStack内置的RegisterService。
    • @KEIOKRYSHA 正如异常所说,没有为注册服务定义 GET。为您的服务使用新路由或更改内置路由。
    • 让我感到困惑的是在我添加了身份验证和授权功能之后。 Postman 给了我这些端点——GET/OPT/POST/DEL Authenticate、GET/POST/UnAssignRoles、GET/POST AssignRoles、GET/POST/PUT Register。所以我认为它们已经可以使用了。
    • @KEIOKRYSHA 路由不会将其限制为动词,因此它接受所有动词,但只有 POST 的实现。最好的地方是服务的源代码,所有的源代码都在 GitHub 上。这是RegisterService Post
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    相关资源
    最近更新 更多