标签: servicestack

ServiceStack.Net的多个可选参数

我正在尝试使用ServiceStack.Net实现具有多个可选参数的服务

目前我的路线看起来像这样

Routes.Add<SaveWeek>("/save/{Year}/{Week}");
Run Code Online (Sandbox Code Playgroud)

我想支持这样的uris:

/保存/ 2010/12 /星期一/ 4 /日/ 6 /日/ 7

即星期一= 4,星期二= 6,星期三= 7

但是我希望能够忽略几天,即调用服务的人可以决定是否要保存每天的每个值...

即像这样缺少参数值

?星期一= 4&周三= 7&周五= 6

当然,一种解决方案是使用以下路由,当我不想保存值时只传递0.

Routes.Add<SaveWeek>("/save/{Year}/{Week}/{Monday}/{Tuesday}}/{Weds}/{Thurs}/{Fri}/{Sat}/{Sun}");
Run Code Online (Sandbox Code Playgroud)

但是.....有没有更好的方法来实现这个功能?

c# asp.net servicestack

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

经过身份验证的ServiceStack.Redis.PooledRedisClientsManager

在实例化PooledRedisClientManager?时,如何为Redis主机名指定用户名和密码?

var _redis = PooledRedisClientManager("my.redishost.com:1234");
Run Code Online (Sandbox Code Playgroud)

我特别需要将一个基于.NET的ServiceStack.Redis应用程序部署到AppHarbor,我正在使用Redis To Go进行Redis托管.

authentication redis servicestack appharbor

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

ServiceStack.Text json反序列化会创建错误的对象,而不是抛出无效的json输入字符串

当我尝试反序列化这个无效的json字符串(最后}]遗漏):

[{"ExtId":"2","Name":"VIP sj?lland","Mobiles":["4533333333","4544444444"]
Run Code Online (Sandbox Code Playgroud)

通过做这个:

var result = JsonSerializer.DeserializeFromString<T>(str);    
Run Code Online (Sandbox Code Playgroud)

ServiceStack json反序列化器接受该字符串,但它创建了一个错误的对象,因为我最终得到了一个具有以下值的C#对象:

ExtId : "2"                                      // ok fine.
Name: "VIP sj?lland"                            // ok fine
Mobiles: ["4533333333","4544444444", "544444444"]// Aarg! An array with 3 objects ?!? 
                                                 // There were only two in the JSON string.
Run Code Online (Sandbox Code Playgroud)

在这种情况下,抛出异常而不是继续使用坏数据会好得多.因此我尝试使用:

JsConfig.ThrowOnDeserializationError = true; 
Run Code Online (Sandbox Code Playgroud)

就在调用DeserializeFromString之前,但没有抛出任何异常.在1月份,我问这个问题配置ServiceStack.Text以抛出无效的JSON,答案是ServiceStack支持resrence并且我可以在GitHub中发出pull请求.

这仍然是这样吗?有没有人已经做过,省了我的麻烦?否则,我的时间表非常紧张,所以如果有人有一些代码或建议如何创建一个选项标志以使ServiceStack抛出反序列化错误,请回复此处,以便我可以更快地完成此操作.

c# json servicestack

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

如何在ServiceStack中注销经过身份验证的用户?

为noob问题道歉.刚刚开始学习servicestack.我正在使用Razor的自托管控制台应用程序作为我的视图引擎,注册的"RegistrationFeature"插件和CredentialsAuthProvider通过表单发布以允许用户登录进行身份验证.

SocialBootStrap应用程序使用MVC 3,并做了"FormsAuthentication.SignOut()",以允许用户注销.鉴于我正在使用自托管应用程序,我创建了一个LogoutService,它只执行Request.RemoveSession()并且看起来有效.

这是注销用户会话的正确方法吗?

servicestack

14
推荐指数
2
解决办法
4272
查看次数

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

我正在尝试使用ServiceStack以RESTful方式将文件返回到ServiceStack客户端.

我已经阅读了有关SO(此处此处)的其他问题,建议使用HttpResult和FileInfo对象或MemoryStream来允许将ContentType标头更改为相关的文件类型.

当我通过浏览器调用服务时,这对我有用,正确的文件会自动开始下载.我如何使用其中一个ServiceStack客户端使用该文件?

我正在使用Request DTO并尝试使用类似的东西返回

return new HttpResult(new FileInfo("file.xml"), asAttachment:true) {
   ContentType = "text/xml"
};
Run Code Online (Sandbox Code Playgroud)

例如,如何使用JsonServiceClient消耗它?

c# servicestack

14
推荐指数
2
解决办法
4534
查看次数

ajax jquery跨域调用不发送授权头

在我对具有服务堆栈的服务器进行跨域调用之前,我已成功通过身份验证并获取我的令牌.

现在我想再做一次调用来检索数据:

$.ajax({
    beforeSend: function(xhr) {                  
        xhr.setRequestHeader('Authorization', 'Basic ' + getToken());   
    },
    type: "GET",
    url: requestUrl,
    xhrFields: {
        withCredentials: true
    },  
    async: true,
    dataType: 'json',
    crossDomain: true
})
Run Code Online (Sandbox Code Playgroud)

当我查看我的谷歌chrome dev工具控制台时,我看到了这个:

OPTIONS http://MyPc.company:82//customers 404 (Not Found) 
OPTIONS http://MyPc.company:82//customers Invalid HTTP status code 404 

XMLHttpRequest cannot load http://MyPc.company:82//customers. 
Invalid HTTP status code 404 (index):1
Run Code Online (Sandbox Code Playgroud)

当我看到小提琴手时,我看到了这个要求:

Inspectors => Auth:没有授权标头.

检查员=>原始:

OPTIONS http://MyPc.company:82//customers HTTP/1.1
Host: MyPc.company:82
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Access-Control-Request-Method: GET
Origin: http://MyPc.company
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, …
Run Code Online (Sandbox Code Playgroud)

jquery cors servicestack

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

ServiceStack.Text如何将类序列化为JSon

刚刚下载了ServiceStack.Text以在我的ASP.NET中使用它.我有许多属性的类,并希望将其中五个(字符串,整数,二进制)序列化为JSON.任何人都可以发布简单的例子如何从我的类创建JSon对象?

c# json servicestack

12
推荐指数
2
解决办法
2万
查看次数

使用JsonSerializer删除JSON Response中的具体__type信息

如何强制__type信息在反序列化的JSON响应中呈现?我没有必要重新序列化这些数据,所以我更愿意删除它.ServiceStack似乎将此添加到我的模型的字典属性中.

这是使用ServiceStack和ServiceStack.Text.JsonSerializer

jsonserializer servicestack

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

如何在我自己的项目中使用ServiceStack Funq

在工作中,我们在ServiceStack中进行了几个新的Web服务项目,并在其中一些项目中利用了Funq.我目前正在开发一个单独的项目,它将使用所述Web服务,并且想知道我是否有办法在我的项目中使用ServiceStack的Funq来解析我的依赖关系,以便使用我们正在使用的或多或少相同的模式开发我们的Web服务.

这可能吗?

.net servicestack funq

12
推荐指数
2
解决办法
3668
查看次数

如何通过DotNetOpenAuth使用OAuth2访问令牌授权访问ServiceStack资源?

我使用DotNetOpenAuth创建了一个OAuth2授权服务器,它工作正常 - 我正在使用资源所有者密码流,并成功地为访问令牌交换用户凭据.

我现在想要使用该访问令牌从ServiceStack API中的安全端点检索数据,我无法弄清楚如何执行此操作.我已经检查了ServiceStack附带的Facebook,Google等提供商,但目前尚不清楚我是否应该遵循相同的模式.

我想要实现的目标(我想!)是

  1. OAuth 客户端(我的应用程序)要求资源所有者('Catherine Smith')提供凭据
  2. 客户端授权服务器提交请求,接收访问令牌
  3. 客户端资源服务器请求安全资源() GET /users/csmith/photos
    • 访问令牌被包括在HTTP头,例如 Authorization: Bearer 1234abcd...
  4. 资源服务器解密访问令牌验证的身份资源拥有者
  5. 资源服务器会检查资源所有者可以访问请求的资源
  6. 资源服务器返回的资源客户

步骤1和2正在运行,但我无法弄清楚如何将DotNetOpenAuth资源服务器代码与ServiceStack授权框架集成.

我是如何实现这一目标的?我在如何使用ServiceStack构建安全api作为OAuth2.0的资源服务器时发现了类似的StackOverflow帖子但它不是一个完整的解决方案,似乎没有使用ServiceStack授权提供程序模型.

编辑:更多细节.这里有两个不同的网络应用程序.一个是身份验证/授权服务器 - 它不承载任何客户数据(即没有数据API),但公开了接受用户名/密码并返回OAuth2访问令牌和刷新令牌的/ oauth/token方法,还有提供令牌刷新功能.这是基于ASP.NET MVC构建的,因为它几乎与DotNetOpenAuth附带的AuthorizationServer示例相同.这可能会在以后更换,但现在它是ASP.NET MVC.

对于实际的数据API,我使用的是ServiceStack,因为我发现它比WebAPI或MVC更好地暴露了ReSTful数据服务.

所以在下面的例子中:

序列图

客户端是用户的本地机器上运行的桌面应用程序,该验证服务器是ASP.NET MVC + DotNetOpenAuth和资源服务器是ServiceStack

需要的特定DotNetOpenAuth代码片段是:

// scopes is the specific …
Run Code Online (Sandbox Code Playgroud)

dotnetopenauth oauth-2.0 servicestack

12
推荐指数
2
解决办法
6686
查看次数