标签: servicestack

为多个接口注册相同的实现

我有一个实现多个接口的类

public class AwesomeThingClass: IAwesome<Thing>, IAwesomeThing {
    // parameterized constructor, so can't use RegisterAutowiredAs
    public AwesomeThingClass(IClient client, string connectionString) {} 
}
Run Code Online (Sandbox Code Playgroud)

它通过使用信号量封装了基数有限的多线程操作(我的意思是,只允许 N 个这样的操作同时运行)。

但是,如果我使用类似的东西向 IoC 注册它

container.Register<IAwesome<Thing>>(cont => new AwesomeThingClass(cont.Resolve<IClient>(), connStr))
container.Register<IAwesomeThing>(cont => new AwesomeThingClass(cont.Resolve<IClient>(), connStr))
Run Code Online (Sandbox Code Playgroud)

我最终得到了两个可以使用IAwesome<Thing>and解决的实例IAwesomeThing,它允许运行 2*N 操作。我绝对需要为两个接口解析相同的实例。除了手动实例化类和注册实例之外,还有什么方法可以实现这一点吗?

这个问题本质上类似于Register the same type to multiple links,但它并不是重复的,因为我正在使用 ServiceStack IoC 容器(Func在撰写本文时),而该问题是关于Unity

c# inversion-of-control servicestack

2
推荐指数
1
解决办法
530
查看次数

RESTFUL --&gt; 检查某个项目是否处于活动状态?

我正在编写一个 RESTful 服务,其中一个端点将检查资源是否处于活动状态。

我正在努力让 RESTful 资源名称符合标准

我的路线 GET /api/v1/items/{itemid}/isActive -- 应该是什么?我正在做的(或想做的)就是在响应中发送 True/False。

或者我必须发送 404 响应吗?---> 这是一个简单的 get ,如果 notFound 则返回 404 ?

rest servicestack

2
推荐指数
1
解决办法
1319
查看次数

WithSqlFilter WITH (NOEXPAND) 提示在输出 SQL 中不正确

我正在尝试使用新的.WithSqlFilter()扩展方法将“WITH (NOEXPAND)”提示添加到针对我的索引视图生成的 select 语句中。但是,输出 SQL 将提示放在 WHERE 子句之后,而不是 FROM 子句之后。我的客户 DTO 也有[Alias("CustomerInfo")]. 这是预期的行为还是错误地生成了 SQL?

var customer = db.From<Customer>()
                 .Where(ci => ci.CustomerId == customerCode)
                 .WithSqlFilter(sql => IsSqlServer(db) ? sql + " WITH (NOEXPAND)" : sql);

return db.Single(customer);
Run Code Online (Sandbox Code Playgroud)

编辑:我需要 IsSqlServer 方法,因为我还有单元测试和其他使用 Sqlite 而不是 SQL Server 的代码,并且需要能够忽略基于连接的提示。

private bool IsSqlServer(IDbConnection db)
{
    var dialect = db.GetDialectProvider();

    return dialect is ServiceStack.OrmLite.SqlServer.SqlServerOrmLiteDialectProvider ||
           dialect is ServiceStack.OrmLite.SqlServer.SqlServer2012OrmLiteDialectProvider ||
           dialect is ServiceStack.OrmLite.SqlServer.SqlServer2014OrmLiteDialectProvider ||
           dialect is ServiceStack.OrmLite.SqlServer.SqlServer2016OrmLiteDialectProvider;
}
Run Code Online (Sandbox Code Playgroud)

生成的SQL:

SELECT TOP 1 "CustomerId", "FirstName", …
Run Code Online (Sandbox Code Playgroud)

c# sql-server servicestack ormlite-servicestack

2
推荐指数
1
解决办法
225
查看次数

将对象转换为不带标头的 CSV 字符串 Servicestack CSVSerializer

我正在使用 Servicestack.text CSV 序列化程序将对象序列化为 CSV 格式。这是我尝试的方法

CsvSerializer.SerializeToString(MyObject)
Run Code Online (Sandbox Code Playgroud)

但它会转换为 CSV,包括这样的标题

ID、姓名、年龄\r\n13、Alex、45

但我不需要这些标题。有什么办法可以排除标题

c# servicestack servicestack-text

2
推荐指数
1
解决办法
1827
查看次数

ServiceStack AuthFeature.HtmlRedirect被忽略

当我设置身份验证功能重定向属性时,我在访问安全页面时没有应用它.例如,我将身份验证功能设置为重定向以使用页面中的自定义登录.

authFeature.HtmlRedirect = "http://localhost/SimpleService/login";
Run Code Online (Sandbox Code Playgroud)

但是,如果我转到安全控制器,这个重定向永远不会被应用,它总是使用服务堆栈默认的"/ login".它正在使用的重定向甚至不包括SimpleService的原始站点名称.以下样品控制器.

[Authenticate]
public class PrivateController : ControllerBase
{
    public ViewResult SecurePage()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

我也试图覆盖Authenticate属性上的重定向,但无济于事.有没有人有任何想法我可能做错了什么?

[Authenticate(HtmlRedirect = "http://localhost/SimpleService/login")]
public class PrivateController : ControllerBase
{
    public ViewResult SecurePage()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

authentication servicestack

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

使用ServiceStack公共覆盖对象OnGet时访问查询字符串值

我正在设置我的frist ServiceStack站点,并且从我的URL访问查询字符串值时遇到一些问题

  public override object OnGet(MyModel.Product request)
        {
            if (request.ItemID != null)
            {
                return Repo.MyRepo.GetProduct(request.ManufacturerID, request.ItemID);
            }

            return Repo.MyRepo.GetProducts(request.ManufacturerID, request.Page, request.PageSize, request.tStamp);
        }
Run Code Online (Sandbox Code Playgroud)

参数Page,PageSize和tStamp不是我对象的属性,但我需要它们来调用我用来获取数据的SP.我怎样才能访问这些?好像我在这里错过了一些非常简单的东西.

servicestack

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

ServiceStack:路由和参数

上个月刚刚发现了ServiceStack,我非常喜欢使用这个优秀的框架.真的厌倦了WCF设置和静态方法原型设计!

我有个问题 !

我创建了一个类:允许使用以下路径显示一个事件或事件列表的事件:

[Route("/events")]
[Route("/events/{Id}")]
public class Event
{
    public ushort Id { get; set; }   
    public string FromDate { get; set; }
    public string ToDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但我还想使用相同的路线列出2个日期之间的事件.实际上路线只采用Id作为参数,但我想添加另一条指定FromDate的路线:我认为这样的事情会起作用:/ events/01-01-2012/10-01-2012为了获得2个日期之间的所有事件但是这是行不通的.

是否可以定义允许根据不同参数定义不同路径的路径(取自DTO)?

我是管理路线的新手,并且非常想知道如何根据不同的参数定义不同的过滤方式.

谢谢您的帮助 !令人敬畏的工作Demis!

routes servicestack

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

使用存储库模式时,ServiceStack操作未显示在元数据中

这是DTO

public class Employee
    {
        public int EmployeeID { get; set; }
        public string EmployeeName { get; set; }
        public string EmployeeeAddress { get; set; }

    }
Run Code Online (Sandbox Code Playgroud)

这是回应

 public class EmployeeResponse
    {
        public List<Employee> listofemp { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

这是服务堆栈服务

public class EmployeeServices:Service
    {
        public dbRepo<Employee> objEmploye; //Repository (which is working fine)

        public EmployeeServices()
        {
            objEmploye = new dbRepo<Employee>();
        }


      public object getAll(Employee obj)
      {
          var objlist = new EmployeeResponse {listofemp = objEmploye.GetAll().ToList()};
          return objlist.listofemp;
      }

    }
Run Code Online (Sandbox Code Playgroud)

这是AppHostBase类

public …
Run Code Online (Sandbox Code Playgroud)

c# servicestack asp.net-mvc-4

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

ServiceStack NuGet更新4.0.22到4.0.31导致部署错误

我希望不要在这里含糊不清,但我刚刚为ServiceStack做了一个NuGet更新,从版本4.0.22更新到4.0.31,项目编译得很好但是一旦部署到iis我得到这个错误时我点击了网站.

程序集'ServiceStack,Version = 4.0.31.0,Culture = neutral,PublicKeyToken = null'类型'ServiceStack.Host.AspNet.AspNetRequest'中的方法'get_Cookies'没有实现.

想知道是否有其他人有此错误?

c# servicestack

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

ServiceStack:如何从JsonServiceClient的Get方法获取StatusCode

我正在使用调用ThirdParty API JsonServiceClient

var client = new JsonServiceClient(ServiceURL);
var response =  client.Get<Output>("Search?id=" + id);
Run Code Online (Sandbox Code Playgroud)

输出是类表示来自第三方API的响应。我能够正确获得输出。但是我想捕获此API响应的StatusCode。我怎样才能做到这一点?

注意我尝试了WebHttpResponse对象而不是Output(response class)。但是我希望statuseCode应该是Output类的属性,而不是的参数 WebHttpResponse。有什么办法可以做到这一点?

c# http-status-codes servicestack

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