我知道ServiceStack提供了控制权限的必需属性,但是,这对我的用例并不完全可用.我有一个具有大量用户生成内容的网站.用户只能编辑具有明确权限的文档.权限由对象或对象组组控制.因此,如果用户是组的管理员,则可以编辑该组管理的所有文档. 以per object per user为基础控制对请求的访问的最佳设计模式是什么?我想尽可能干燥的方法,因为它会影响我所有API端点的95%. 另外,这是否可以与Fluentvalidation集成并返回适当的HTTP响应? 非常感谢, 理查德. 解决方案 我在ServiceStack应用程序中使用每个对象权限.实际上,这是一个访问控制列表(ACL). 我已经创建了一个工作自托管的控制台示例您可以在Github上分配. ACL模式: 我使用下图中显示的数据库结构,该数据库结构在我的数据库中,例如文档,文件,联系人等. 权限表包含适用于特定用户,特定组,特定对象和特定对象类型的规则,并且可以在组
以下是关于 servicestack 的编程技术问答
我试图通过Hello World示例和自托管示例来学习ServiceStack.我正在要求json内容. 我已经注意到响应标题中的以下内容: 在ASP.NET项目中托管的基本服务: HTTP/1.1 200 OK Server: ASP.NET Development Server/10.0.0.0 Date: Wed, 10 Apr 2013 12:49:46 GMT X-AspNet-Version: 4.0.30319 X-Powered-By: ServiceStack/3.943 Win32NT/.NET Cache-Control: private Content-Type: application/json; charset=utf-8 Content-Length: 16
我正在从servicestack看ormlite,我在这里要做的就是称为存储过程,而该过程又返回了许多行,绝对不会绑定到任何域对象,但也可能没有DTO或可能没有DTO对象要映射.我想知道我是否可以将其绑定到一种类型.但是,听起来像Ormlite目前不支持动态类型绑定. Ormlite此时是否支持? 解决方案 设计Ormlite不支持编组到动态类型,并期望结果集映射到键入的Poco. 尽管确实有专门的API访问var query = db.From() .Join() .OrderBy(e => e.Id) .Select( (e, d) => new { e.Id, e.LastName, d.Name }); var results = db.Select(query); var row = res
我刚刚看到 servicestack 我正在考虑使用它来建立服务. 是否可以使用服务堆栈将ODATA供稿提供服务,以便我能够揭露可视性并从客户端查询? 解决方案 编辑 ServiceStack现在添加了 将ServiceStack支持ODATA. 否. 无论如何都不是直接的.如果有人看到ODATA中的任何值,他们可以自由地添加必要的功能,作为可选的发展差异 odata非常适合Servicestack,谁 每分钟,当您的花式框架做神奇的事情时,每分钟节省 帮助您花费未来的10分钟调试.不值得. 我们不认为依靠黑盒斑点的魔术行为会持续时间的考验.从历史上看,每当我们使用此服务时(例如促进不良的Web服务实践 odata还促进了您揭露内部实施详细信息的反模式将您隐含的服务合同紧密耦合到基础的RDBMS桌子,从而使您对可缓存性,重新价值的控制有限或将来的服务版本. 这类似于递给您的数据库连接字符串,一旦您将客户端与其结合在一起,则表
我正在努力争夺ServiceStack会"开箱即用"的事情... 我有一个ServiceStack API,可以通过凭据,基本,Google OpenID和LinkedIn Oauth2进行身份验证. 从空的userauth和userauthdetails表开始,我发现如果我: 启动我的应用程序并使用凭据登录 注销 使用Google OpenID Auth 登录 ServiceStack创建了两个独立的Userauth记录,而不是将Google Userauthdetail与凭证身份验证的Userauth联系起来.尽管这两个凭据在这两个记录中显示了相同的电子邮件地址. 但是... 如果我从空白数据库开始,并使用LinkedIn OAuth2重复这些步骤,我会发现使用链接的Userauthdetails记录创建了单个Userauth记录.这就是我希望Google Auth做的. 任何人都可以阐明为什么会发生这种情况,如果已经有一个匹配的电子邮件地址
我已经使用dotnetopenauth创建了OAuth2授权服务器,该服务器正常工作 - 我正在使用资源所有者密码流,并成功将用户凭据交换为访问令牌. 我现在想使用该访问令牌从ServiceStack API中的安全端点检索数据,我无法确定如何做.我已经检查了Facebook,Google等.Servicestack随附的提供商,但尚不清楚我是否应该遵循相同的模式. 我想实现的目标(我认为!)是 oauth 客户(我的应用程序)询问资源所有者('Catherine Smith')证书 客户端将请求提交授权服务器,接收访问令牌 客户端请求安全资源 资源服务器(GET /users/csmith/photos) 访问令牌包含在HTTP标题中,例如Authorization: Bearer 1234abcd... 资源服务器解密访问令牌以验证资源所有者的身份 资源服务器检查资源所有者是否访问了请求的资源 资源服务器将资源返回 client 步骤1和2正在工
在ServiceStack Oauth实现中,我只看到有可能使用EG自动登录的可能性. Facebook帐户. 但是是否有可依从性来支持Facebook登录名的注册过程.我想要的是让用户登录Facebook应用程序,然后加载他们的姓名,姓氏和电子邮件和预填充所需的文本框才能在我的网站上进行真实注册(因为我也必须进行手机验证等)用户在与Facebook登录时将被授权和身份验证.只有凭据登录才能有效. 编辑:我找到了一个解决方案. 在Facebookprovider.cs 中 public override bool IsAuthorized(IAuthSession session, IOAuthTokens tokens, Auth request = null) { if (request != null) { if (!LoginMatchesSession(session, request.UserName)) return f
如果没有主要黑客,可以在跑步者中获取ServiceStack请求的原始请求主体? 我正在使用新的API(Service and Runner)编写OAuth服务提供商,以在ServiceStack上运行.由于OAuth签名的工作方式,我需要为每个请求获取原始请求主体. OAuth保护层被添加到跑步者中,以便无效的OAuth请求可以轻松返回空/错误响应,而无需在服务类中任何样板或子分类,或者对特殊的" Oauthservice"类. 解决方案 访问原始请求主体的方法是使用IHttpRequest.GetRawBody()或从IHttpRequest.InputStream中读取. 但是,由于HTTP请求主体是一个正向流,默认情况下,只能调用一次通常由ServiceStack调用以供应DTO的启用. serialization and deleialization and deleialization and deleialization docs 展示如何告诉Servi
我获得单页网络应用程序工作(使用ServiceStack的RazorFormat()MVC,不是.asp MVC),我运行了A (以前通过)测试服务.测试失败.再次测试了Web应用(调试运行,导航到浏览器中的//localhost:1337/ResourceList):仍在工作.我的测试有问题吗? 这是错误: Test Name: TestResourceList Test FullName: [0-1015]ServiceWrapper.Test.TestSWrapperServices.TestResourceList Test Source: c:\Users\uname\Documents\Visual Studio 2012\Projects\ServiceWrapper\UnitTestProject1\ServiceTests.cs : line 96 Test Outcome: Failed Test Duration: 0:00:02.188
我正在尝试使用请求过滤器进行单位测试来为正在将项目注入ihttprequest.items的服务: this.RequestFilters.Add((req, res, dto) => { // simplified for readability... var repo = container.Resolve(); var apiKey = req.Headers["ApiKey"]; // lookup account code from api key var accountcode = repo.GetByApiKey(apiKey); req.Items.Add("AccountCode", accountCode); }); 我的服务使用该字典项目: public class UserService : AppServiceBase { public IUserSe
我已经通过nuget添加了ServiceStack.redis.该软件包对servicestack.common具有依赖性,该common对servicestack.text.text 此项目是从我的Web项目中引用的,但是当我构建网站并将其加载到浏览器中时,我会收到错误 无法加载文件或汇编'serviceStack.text,版本= 3.9.24.0,culture =中性,publicKeyToken = null'或其依赖项之一.系统找不到指定的文件. 果然,当我进入网站的bin目录时,它不在.奇怪的是,如果我转到类库的bin目录,我正在引用(我将nuget软件包的一个)就在那里. 回顾 classLibrary servicestack.redis通过nuget(包括servicestack.common和servicestack.text) 所有这些使它在构建后的bin dir中 Web Proj refs classLibrary
我用C#使用ServiceStack.Redis创建了一个Visual Studio(社区2019)项目.由于它是C#,因此我使用Windows 10(Windows有一个Redis版本,但它确实很旧,而且我知道,这是非正式的,所以恐怕这可能是问题所在). 这是我的代码的摘录: public class PeopleStorage: IDisposable { public PeopleStorage() { redisManager = new RedisManagerPool("localhost"); redis = (RedisClient)redisManager.GetClient(); facts = (RedisTypedClient>)redis.As>(); } public List GetFacts(int id)
目前,我正在使用使用服务堆栈构建的.NET Core Web应用程序.目前使用NLOG提供了日志记录,而Azure应用程序Insights作为目标. 当前记录消息和例外时,我会遇到一些怪异的行为: Log.Fatal("test not implemented exception", new NotImplementedException()); //this logs under Exceptions in Application Insights Log.Fatal(new NotImplementedException("test not implemented exception")); //this logs under Trace 我希望能够将第二行作为例外而不是跟踪记录.有什么办法可以实现这一目标? 我无法找到这个答案,所以我要发布一个问题. nlog例外是应用程序insights in Applicate Insights - 没有提及如何将类
我开始构建一个应用程序,我打算使用ServiceStack.只想知道什么是处理Nhibernate Isession的最佳实践/好方法或其他"每个请求"上下文特定会话对象的方法. 我认为在IOC中注册ISessionFactory喜欢: container.Register(sessionFactory); 并且在需要时获得一个新的会话对象...或直接提供会话对象: container.Register(c => sessionFactory.OpenSession()).ReusedWithin(ReuseScope.None); 或通过global.asax beginRequest事件处理ISESSION和默认交易: protected void Application_BeginRequest(object sender, EventArgs e) { var session = f
我试图在Nginx和Fastcgi-Mono-Server下使用ServiceStack运行Web服务API. 服务器启动正常,API启动并运行.我可以通过ServiceStack Profiler在浏览器中看到响应时间,它们运行到10ms以下. 但是,一旦我使用"攻城"进行小型负载测试(仅使用10个连接的500个请求),我就开始获得502个坏网关.要恢复,我必须重新启动Fastcgi-Mono-Server. NGINX服务器很好. Fastcgi-Mono-Server是在此小负载后停止响应的产品. 我已经尝试使用TCP和UNIX插座(我知道UNIX插座的权限问题,但我已经解决了). 这是我的配置: server { listen 80; listen local-api.acme.com:80; server_name local-api.acme.com; location / {
我正在尝试编写一个自定义验证器,该验证器将使用Ormlite检查数据库中的实体是否存在.问题在于,不再可以从用法中推断出Irulebuilder的类型参数. 我必须像这样编写方法呼叫: RuleFor(r => r.Id).Exists() 但我想这样写: Rulefor(r => r.Id).Exists() 这是因为irulebuilder具有两个类型参数,而该方法是扩展方法.是否有一种聪明,流利的方法来设计此操作并最优选地像第二版一样进行函数调用? 这是我的扩展方法的代码和我的验证器: public static class AbstractValidatorExtensions { public static IRuleBuilderOptions Exists(this I
我正在进行有关客户搜索客户搜索客户的小型研究,我发现Nest是此问题最受支持的解决方案之一. 我正在看Nest的文档,我无法找到一种从查询中输出原始JSON并避免序列化的方法通过一些不必要的步骤将信息发送给客户的过程. ......我也想知道如何覆盖序列化过程? 我发现Nest使用JSON.NET,我想为ServiceStack JSON Serielizer更改. 谢谢! 解决方案 嗨,佩德罗,您可以使用NEST 进行此操作 var searchDescriptor = new SearchDescriptor() .Query(q=>q.MatchAll()); var request = this._client.Serializer.Serialize(searchDescriptor); ConnectionStatus result = this._client.Raw.SearchPos
我需要为ServiceStack服务定义DTO类. Service Stack使用基于类名称的约定,因此,如果我的类称为传输,相应的服务将使用HTTP操作中使用类型的"传输"的Expose Metadata. 但是我已经有传输类 - 我的DTO对象将被映射到.为了避免混乱,我想定义变速器DTO(可能比"索赔"后缀更好),但要在裸露的服务元数据中保持"变速箱".我找不到覆盖ServiceStack约定的方法,因此它呼叫在各自的C#类中暴露于服务操作中的类型. 是否有一种方法可以覆盖暴露的类型(例如使用属性),否则这是无法自定义的硬有线约定? 解决方案 请参阅 auto-route auto-route Generation Generation Generation Farteragies 在路由wiki 用于自定义,删除或注入不同的自动式Route的不同方式生成的策略.
最简单的方法我得到ServiceStack XML的工作序列化工作是当XML包含一个名称空间时.但是,我收到的XML不包含名称空间.最简单的工作示例: [Serializable] public class test { } class Program { static void Main(string[] args) { string xml=""; var result = ServiceStack.Text.XmlSerializer.DeserializeFromString(xml); } } 但是,这不是我想要的.我希望以下内容值得注意,因为那是我从多个服务中获得的XML: string xml=""; 但这给了我以下错误: Deseri