标签: servicestack

Doxygen并将一个属性值添加到输出文档中

ServiceStack使用c#属性标记Web服务的休息路径.

例如

[RestService("/hello1")]
[RestService("/hello2")]
public class Hello
Run Code Online (Sandbox Code Playgroud)

我想在Hello类的doxygen输出中使Doxygen包含RestService属性的值.如果带有括号的完整行包含在输出文档中,我并不太关心漂亮的formattin.

有什么建议?

一个快速而肮脏的技巧比编写Doxygen扩展更好;)

干杯

Tymek

====编辑

doxygen用户答案的Python版本(因此可以在Windows上轻松工作)将是:

#!/usr/bin/env python
import sys
import re

if (len(sys.argv) < 2):
    print "No input file"
else:
    f = open(sys.argv[1])
    line = f.readline()
    while line:
        re1 = re.compile("\[RestService\(\"(.*)\",.*\"(.*)\"\)]")
        re1.search(line)
        sys.stdout.write(re1.sub(r"/** \\b RestService: \2 \1\\n */\n", line))
        #sys.stdout.write(line)
        line = f.readline()
    f.close()
Run Code Online (Sandbox Code Playgroud)

并且DOXYFILE将具有:

INPUT_FILTER           = "doxygenFilter.py"
Run Code Online (Sandbox Code Playgroud)

c# documentation doxygen servicestack

8
推荐指数
1
解决办法
1460
查看次数

如何在查询字符串中传递复杂类型列表?

如何在ServiceStack中传递复杂类型列表?例如,我的Request DTO看起来像这样:

//Request DTO
public class Test
{
    public IList<Fund> Funds { get; set; }
}

public class Fund
{
    public string Key { get; set; }
    public int Percent { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何通过HTTP get传递序列化对象?

http://localhost:49490/api/funds={ ?? }
Run Code Online (Sandbox Code Playgroud)

KeyValueDataContractDeserializer:转换为类型时出错:类型定义应以"{"开头,期待序列化类型"基金",字符串以:asdf开头

servicestack

8
推荐指数
1
解决办法
5024
查看次数

ServiceStack.OrmLite中的ntext

我怎样才能在ServiceStack.OrmLite代码中首先使用nText数据类型?

public class Email
{
    [AutoIncrement]
    public long ID { get; set; }


    public DateTime Date { get; set; }

    public string From { get; set; }

    public string Subject { get; set; } 

    nText =>
    public string Body { get; set; } 

}
Run Code Online (Sandbox Code Playgroud)

如果我使用字符串数据类型,ormlite在数据库中生成nVarchar(8000)

我需要超过8000个字符的数据

c# sql-server code-first servicestack ormlite-servicestack

8
推荐指数
1
解决办法
1890
查看次数

跨平台ServiceStack身份验证

构建以下身份验证解决方案的最佳方法是什么?

我有一个独立的(没有与MVC集成)ServiceStack REST服务层.此服务是我所有数据的入口点.客户端上没有数据存储.

我有多个客户端(ASP.Net MVC 4站点,MonoTouch应用程序,MonoDroid应用程序,Silverlight应用程序,MonoMac应用程序等).

我想在服务级别提供身份验证(Facebook,Twitter等),包括将用户存储在MongoDBAuthRepository中,但允许客户端提供登录UI(我想要这个吗?).例如,对于MVC站点,我想将远程ServiceStack身份验证服务(包括Facebook,Twitter)与MVC的身份验证系统集成.似乎应该在服务端进行实际身份验证,但客户端需要保持身份验证响应.

我已经阅读了wiki,查看了SocialBootstrap,并阅读了论坛,但我仍然对这应该如何以分布式方式工作感到困惑.

authentication servicestack

8
推荐指数
1
解决办法
1159
查看次数

在ServiceStack客户端中使用OAuth

我试图在客户端上使用OAuth(facebook/twitter)然后使用ServiceStack进行身份验证时感到困惑.我看到在客户端进行身份验证的所有示例都使用基本身份验证,如下所示:

var response = _client.Send<AuthResponse>(new Auth
{
    provider = CredentialsAuthProvider.Name,
    UserName = model.Username,
    Password = model.Password,
    RememberMe = true
});
Run Code Online (Sandbox Code Playgroud)

我需要做些什么才能通过Facebook验证我的独立客户端?我打电话给FB并获得UID,访问令牌,电子邮件等,那么对服务堆栈的调用是什么?

目前我的想法是在客户端上使用FB进行身份验证,调用服务以检查用户是否存在(查看电子邮件地址).如果他们没有注册并使用他们的一些数据的哈希作为密码登录.如果它们存在,请以相同方式记录它们.这是合理/最佳做法吗?

提前致谢

oauth servicestack

8
推荐指数
1
解决办法
1634
查看次数

我应该在Service Stack服务模型中使用什么命名约定?

我们正考虑在下一个项目中使用ServiceStack; 在看示例时,我注意到,没有通用的命名约定. 例如:

entity:电影
请求:电影
回复:MovieResponse

所有操作都是如此. 现在这个例子:

实体:答案
请求:答案
响应:AnswerResult

完后还有:

实体:用户?
请求:GetUsers
响应:GetUsersResponse

(看到用动词盯着的班级名字有点奇怪)

所以,你可能想出了一些聪明的命名约定并希望分享.此外,服务堆栈上是否有更大的开源项目,我可以看看他们如何组织他们的服务模型?

c# servicestack

8
推荐指数
2
解决办法
1651
查看次数

扩展服务堆栈身份验证 - 使用自定义用户身份验证元数据填充用户会话

我正在尝试扩展Service Stack的身份验证和注册功能.我的身份验证和注册工作正常,但我需要为每个用户添加一些自定义数据.从Service Stack的文档和我发现的其他各种帖子中,您可以使用UserAuth表中内置的MetaData列添加自己的数据.

我创建了一个CustomAuthRepository,所以我可以设置UserAuth的元数据属性,这是我的自定义仓库:

public class CustomAuthRepository : OrmLiteAuthRepository, IUserAuthRepository
{
    public UserAuth CreateUserAuth(UserAuth newUser, string password)
    {
        newUser.Set(new LoginInfo
        {
            IsActive = false,
            PasswordNeedsReset = true
        });
        return base.CreateUserAuth(newUser, password);
    }
}
Run Code Online (Sandbox Code Playgroud)

这对于设置元数据非常有用,我最终在UserAuth表的元数据列中使用了LoginInfo对象的序列化版本.

现在我要做的是当用户进行身份验证时,我需要根据某些元数据更改AuthResponse.例如,如果用户尚未激活,我想返回带有属性的AuthResponseIsActive = get value from custom meta data

如果我可以将自定义元数据导入AuthSession,我想我可以这样做.在我的自定义凭证auth提供程序中,我可以根据AuthSession中的内容更改响应对象:

public class CustomCredentialsAuthProvider : CredentialsAuthProvider
{
    public override object Authenticate(IServiceBase authService, IAuthSession session, Auth request)
    {
        var customUserAuthSession = (CustomUserAuthSession)session;

        if (!customUserAuthSession.LoginInfo.IsActive)
        {
            return new
            {
                UserName = customUserAuthSession.UserName,
                IsActive = customUserAuthSession.LoginInfo.IsActive
            };
        }

        var isAuthenticated …
Run Code Online (Sandbox Code Playgroud)

servicestack

8
推荐指数
1
解决办法
3239
查看次数

Servicestack CorsFeature全局选项处理程序不在某些路由上触发;

我有使用CorsFeature服务的设置,以及正在使用的文件APPHOST使用的函数收集到mythz在其他的答案提出的办法,:

private void ConfigureCors(Funq.Container container)
{
    Plugins.Add(new CorsFeature(allowedOrigins: "*",
                                allowedMethods: "GET, POST, PUT, DELETE, OPTIONS",
                                allowedHeaders: "Content-Type, Authorization, Accept",
                                allowCredentials: true));

    PreRequestFilters.Add((httpReq, httpRes) =>
    {
        //Handles Request and closes Responses after emitting global HTTP Headers
        if (httpReq.HttpMethod == "OPTIONS")
        {
            httpRes.EndRequest();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

但是,预请求过滤器仅针对某些服务请求触发.我们在服务中拥有的一个基本实体是一个问题实体,并且定义的自定义路由如下:

[Route("/question")]
[Route("/question/{ReviewQuestionId}", "GET,DELETE")]
[Route("/question/{ReviewQuestionId}/{ReviewSectionId}", "GET")]
Run Code Online (Sandbox Code Playgroud)

使用POSTMAN触发测试查询(全部使用OPTIONS动词),我们可以看到这将触发预请求过滤器:

http://localhost/myservice/api/question/
Run Code Online (Sandbox Code Playgroud)

但这不会:

http://localhost/myservice/api/question/66
Run Code Online (Sandbox Code Playgroud)

据推测,这是因为第二和第三条路线明确定义了它们接受的动词,OPTIONS不是其中之一.

是否真的有必要在限制所支持的动词的每个定义路线中拼出OPTIONS?

servicestack

8
推荐指数
1
解决办法
1188
查看次数

在ServiceStack中增加maxRequestLength以获取特定路由

所以我最近写了一个简单的服务来将文件上传到我的服务器.一切正常.我的web.config看起来像这样(最大上传大小限制为20 MB):

<configuration>
  <system.web>
    <httpRuntime maxRequestLength="20480" executionTimeout="600" />
    <httpHandlers>
      <add path="api*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" />
    </httpHandlers>
    ...
  </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我的所有路由都以/ api /开头,例如我的上传服务位于/ api/documents/upload.

现在我的问题是:是否可以为不同的服务定义不同的上传大小?(在我的例子中,每项服务限制为20 MB!)

我尝试了一些带有location-tag的东西,但它没有使用httpRuntime-tag.有没有尝试过这样的东西?

c# web-config servicestack

8
推荐指数
1
解决办法
1153
查看次数

ServiceStack Ormlite:System.InvalidProgramException JIT编译器遇到内部限制

嗨,我正在使用Ormlite运行ServiceStack,我遇到了这个错误.以前它工作正常.我不确定我所改变的是什么导致了这个错误.我刚刚使用了一个简单的db.Select()调用,它会抛出此错误.我尝试了各种方法,比如更新nuget包,清理和重建项目等,但它们都不起作用.

System.InvalidProgramException was caught
  _HResult=-2146233030
  _message=JIT Compiler encountered an internal limitation.
  HResult=-2146233030
  IsTransient=false
  Message=JIT Compiler encountered an internal limitation.
  Source=ServiceStack.OrmLite
  StackTrace:
       at ServiceStack.OrmLite.OrmLiteConfig.get_ExecFilter()
       at ServiceStack.OrmLite.ReadConnectionExtensions.Exec[T](IDbConnection dbConn, Func`2 filter)
       at ServiceStack.OrmLite.ReadConnectionExtensions.Select[T](IDbConnection dbConn, Expression`1 predicate)
   InnerException: 
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议可能出错的地方?

c# servicestack .net-4.5 ormlite-servicestack

8
推荐指数
1
解决办法
1747
查看次数