Tag: servicestack

ServiceStack API和ASP MVC身份validation有两种方式

我在解决通过ServiceStack服务html页面和Web服务的ASP MVC应用程序的体系结构时遇到了麻烦。 该应用程序存在于基本URL中,例如“ http://myapplication.com ”,SS存在于“ http://myapplication.com/api ”中,因为它是配置两者的最简单方法。 一般来说一切正常,但是当我到达授权和身份validation的一部分时,我就被困住了。 首先,我需要应用程序处理cookie,因为ASP通常会执行FormsAuthentication,并且当使用属性“Authorize”时,用户将通过登录屏幕并使用操作和控制器。 这是典型的ASP,所以我没有问题,例如“ http://myapplication.com/PurchaseOrders ”。 另一方面,我的应用程序的客户端将从javascript使用我的Web服务API。 在某些情况下,还会使用ServiceStack的“Authenticate”属性标记这些Web服务。 例如,“ http://myapplication.com/api/purchaseorders/25 ”必须validation用户是否可以查看该特定采购订单,否则发送401 Unauthorized,以便javascript可以处理这些情况并显示错误消息。 最后但并非最不重要的是,另一组用户将使用任何外部应用程序(可能是Java或.NET)通过令牌使用我的API。 因此,我需要解决两种类型的身份validation,一种使用用户名和密码,另一种使用令牌并使其持久化,因此一旦第一次进行身份validation,下一次调用就可以更快地从API中解决。 这是我到目前为止的代码,我已经非常简单地说明了这个例子。 [HttpPost] public ActionResult Logon(LogOnModel model, string returnUrl) { if (ModelState.IsValid) { JsonServiceClient client = new JsonServiceClient(“http://myapplication.com/api/”); var authRequest = new Auth { provider = CredentialsAuthProvider.Name, UserName = model.UserName, Password = model.Password, RememberMe = model.RememberMe […]

如何使用ServiceStack客户端使用文件

我正在尝试使用ServiceStack以RESTful方式将文件返回到ServiceStack客户端。 我已经阅读了有关SO( 此处和此处 )的其他问题,建议使用HttpResult和FileInfo对象或MemoryStream来将ContentType标头更改为相关的文件类型。 当我通过浏览器调用服务时,这对我有用,正确的文件会自动开始下载。 我如何使用其中一个ServiceStack客户端使用该文件? 我正在使用Request DTO并尝试使用类似的东西返回 return new HttpResult(new FileInfo(“file.xml”), asAttachment:true) { ContentType = “text/xml” }; 例如,我如何使用JsonServiceClient消耗它?

如何在servicestack.net中实现身份validation

我正在调查servicestack.net – 但是它的示例和文章似乎没有涵盖身份validation – 这是由servicestack.net处理的 – 如果是这样的话? 特别是我有兴趣实现对以下方面的支持: OAuth(因此能够检查原始请求并validation它/检索关联的用户信息并在将请求传递到servicestack.net进行处理之前与请求关联)。 基于会话/ cookie的身份validation(因此允许已经具有有效ASP.Net会话的Ajax客户端将其用于身份validation,而不是需要显式传递登录和密码详细信息以获取适合随后请求提交的会话令牌)。 有人能指出我在使用ServiceStack.Net框架时certificate身份validation/安全性的文档/示例的方向。

ServiceStack 4中的Razor依赖问题

我正在尝试将应用程序升级到ServiceStack 4,但我在Web.config引用System.Web.WebPages.Razor收到错误: 无法加载文件或程序集’System.Web.WebPages.Razor, Version = 1.0.0.0 ,Culture = neutral,PublicKeyToken = 31bf3856ad364e35’或其依赖项之一。 该系统找不到指定的文件。 违规引用与各种ServiceStack示例中包含的完全相同: … 我试图运行官方示例( Razor RockStar和EmailContacts ),但是当我运行它时我也遇到了同样的错误。 如果我将库声明更改为使用Version=2.0.0.0 ,我没有收到任何错误。 所以我的问题是: 示例是错误的,是否应该将它们移动到2.0.0.0或者我做错了什么? 我的设置: Windows 8.1 Pro x64 Visual Studio 2013专业版 针对.Net 4.5,x86的应用定位 ServiceStack 4.0.15

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’没有实现。 想知道是否有其他人有此错误?

关闭门后的Swagger-UI中的ServiceStack API文档

我希望只有在我们的网络应用程序上对用户进行身份validation(表单身份validation)时才允许访问swagger-ui和元数据,但我希望一直允许API访问(API有一些公共方法,有些需要基本身份validation)。 所以我做的是为API添加了这个路由前缀: public override RouteAttribute[] GetRouteAttributes(Type requestType) { var routes = base.GetRouteAttributes(requestType); routes.Each(x => x.Path = “/API” + x.Path); return routes; } 和: ServiceRoutes = new Dictionary { { typeof(AuthenticateService), new[] { “/api/auth”, “/api/auth/{provider}” } }, } 这也是在web配置中: 事情是,当我去/api/ now时工作正常,但是当我尝试调用某些方法时,我被重定向到我的login路线。 有没有办法像我开始那样解决这个问题,或者有更好的方法来保护文档?

ServiceStack AppHostHttpListenerBase无法连接到远程服务器

我正在我的应用程序上完成一些function测试,我想我已经非常接近了。 我的问题是,当我运行第一次测试时,我得到了错误。 无法连接到远程服务器。 预期:好的 但是:0 我可以确认,如果我在断言上设置断点,然后尝试在我的浏览器中点击BaseUrl ,则找不到它。 这是我的考试。 [Test] public void MyTestTest () { var client = new RestClient( ServiceTestAppHostBase.BaseUrl ); // client.Authenticator = new HttpBasicAuthenticator( NUnitTestLoginName, NUnitTestLoginPassword ); var request = new RestRequest( “/users/”, Method.GET ); request.RequestFormat = DataFormat.Json; var response = client.Execute( request ); // do assertions on the response object now Assert.That( […]

将Web服务迁移到.NET Core 2.0并返回json

我已将我的Web服务迁移到.NET Core 2.0,它工作正常,但我有问题得到响应为json字符串。 关于api的方法: [HttpGet] [ProducesResponseType(typeof(string), 200)] [ProducesResponseType(typeof(EntityNotFoundErrorResult), 404)] public async Task GetCurrenciesAsync() { var result = await service.GetByTypeAsync(ObjectType.Currency.ToString()); return Ok(result); } 返回正确的json作为result : “{\”elements\”: [{\”Id\”: \”1\”, \”Symbol\”: \”PLN\”},{\”Id\”: \”2\”, \”Symbol\”: \”SIT\”}]}” 然后在客户端我使用服务堆栈将我的货币作为字符串: public virtual IEnumerable GetCurrencies() { string response = null; try { response = api.Get(“/Currencies”); } catch (Exception e) { } return string.IsNullOrEmpty(response) […]

ServiceStack – validation和数据库访问

我正在使用ServiceStack实现Api。 我的解决方案的一个关键方面是积极的validation策略。 我使用ServiceStack的ValidationFeature,这意味着如果在应用程序容器中注册了IValidator (或其后代:AbstractValidator ),validation将在服务之前自动运行。 通过积极validation,我的意思是我检查所有可能的错误情况,以及validation器级别的逻辑validation。 因此,我的服务逻辑非常简洁。 从实际的角度来看,服务validation的服务逻辑的这种独立性是非常好的,因为它提供了非常容易阅读和推理服务逻辑/实现。 但是,我开始认为FluentValidation的规则和规则集更适合简单的格式validation,而不是直接在我正在进行的数据库访问(主要是测试源自请求中提取的ID的404错误)。 问题: 1:validation逻辑在概念上是否存在访问数据库的错误? 2:从我到目前为止看到的,包括SS源代码,我没有找到一个表单来定义FluentValidation规则,例如:从请求中提取Id,访问数据库检索实体,如果是,则抛出404没有找到进入。 我只使用FV规则来定义基本格式validation,例如: RuleFor(x => x.UserName).NotEmpty(); RuleFor(x => x.Password).NotEmpty(); 其余的我手动做。 有解决这个问题的人吗? 注意:这不是关于如何将ValidationResult / ValidationError转换为HttpResult / HttpError的问题。 我已经介绍过,使用了SS 3.9.44中引入的ValidationFeature的ErrorResponseFilter。 谢谢

在validation器中访问Servicstack.net会话

如何在validation代码中访问ServiceStack.net会话? public class UserSettingsValidator : AbstractValidator { public UserSettingsValidator() { RuleFor(x => x.UserId) .SetValidator(new PositiveIntegerValidator()) .SetValidator(new UserAccessValidator(session.UserId)); //<– I need to pass the UserID from the session here } } 在服务实现中,我只是这样做: var session = base.SessionAs(); 但这对我的抽象validation器不起作用。 谢谢! 编辑:这是版本3.9.71.0