尝试在 PCL 服务模型项目中使用 ServiceStack RequiredPermission 属性
Trying to use ServiceStack RequiredPermission attribute in PCL service model project
我正在尝试将我们现有的 ServiceStack DTO 服务模型项目移植到可移植 Class 库,并发现 RequiredPermission 和 RequiresAnyPermission ServiceStack 属性似乎没有在 PCL 来自 nuget 的库。
我在 HelloMobile 示例项目 (https://github.com/ServiceStackApps/HelloMobile/tree/master/src/ServiceModel) 中找不到对这些属性的任何引用,其最近的提交评论暗示应该可以在 [=26] 中的客户端和服务器之间共享服务 DTO 定义=] 服务模型项目.
这是我packages.config的内容:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ServiceStack.Client" version="4.0.52" targetFramework="portable45-net45+win8" />
<package id="ServiceStack.Interfaces" version="4.0.52" targetFramework="portable45-net45+win8" />
<package id="ServiceStack.Interfaces.Pcl" version="4.0.24" targetFramework="portable45-net45+win8" />
<package id="ServiceStack.Text" version="4.0.52" targetFramework="portable45-net45+win8" />
</packages>
我必须添加 ServiceStack.Interfaces.Pcl 包才能获得我们也广泛使用的 IReturn<> 属性。
关于是否以及在何处可以为 PCL 项目定义这些属性有什么想法吗?
Filter Attributes 像 [RequiredPermission]
和 [RequiredAnyPermission]
包含客户端上不存在的服务器行为。
由于它们是内部实现细节而不是关于您服务的元数据,因此强烈建议避免在 DTO 上完全注释它们,而是将它们添加到 "Service-level" 处的服务实现中,这将适用于所有服务:
[RequiredPermission("ThePermission")]
public class MyProtectedServices : Service
{
}
或者在 "Action-level" 如果您只想将其应用于单个服务,例如:
public class MyProtectedServices : Service
{
[RequiredPermission("ThePermission")]
public object Any(ProtectedRequest request)
{
...
}
}
另一种解决方案是使用 C# Add ServiceStack Reference 功能,它提供了另一种方法来在客户端项目中获取您的服务类型 DTO,并去除任何特定于服务器的属性。
DTO 应该只依赖于 ServiceStack.Interfaces
是将所有 DTO 包含在一个单独的 ServiceModel 项目中,该项目 唯一的依赖项 是 PCL ServiceStack.Interfaces.dll
因此每个 .NET 客户端都可以重复使用它们。
我正在尝试将我们现有的 ServiceStack DTO 服务模型项目移植到可移植 Class 库,并发现 RequiredPermission 和 RequiresAnyPermission ServiceStack 属性似乎没有在 PCL 来自 nuget 的库。
我在 HelloMobile 示例项目 (https://github.com/ServiceStackApps/HelloMobile/tree/master/src/ServiceModel) 中找不到对这些属性的任何引用,其最近的提交评论暗示应该可以在 [=26] 中的客户端和服务器之间共享服务 DTO 定义=] 服务模型项目.
这是我packages.config的内容:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ServiceStack.Client" version="4.0.52" targetFramework="portable45-net45+win8" />
<package id="ServiceStack.Interfaces" version="4.0.52" targetFramework="portable45-net45+win8" />
<package id="ServiceStack.Interfaces.Pcl" version="4.0.24" targetFramework="portable45-net45+win8" />
<package id="ServiceStack.Text" version="4.0.52" targetFramework="portable45-net45+win8" />
</packages>
我必须添加 ServiceStack.Interfaces.Pcl 包才能获得我们也广泛使用的 IReturn<> 属性。
关于是否以及在何处可以为 PCL 项目定义这些属性有什么想法吗?
Filter Attributes 像 [RequiredPermission]
和 [RequiredAnyPermission]
包含客户端上不存在的服务器行为。
由于它们是内部实现细节而不是关于您服务的元数据,因此强烈建议避免在 DTO 上完全注释它们,而是将它们添加到 "Service-level" 处的服务实现中,这将适用于所有服务:
[RequiredPermission("ThePermission")]
public class MyProtectedServices : Service
{
}
或者在 "Action-level" 如果您只想将其应用于单个服务,例如:
public class MyProtectedServices : Service
{
[RequiredPermission("ThePermission")]
public object Any(ProtectedRequest request)
{
...
}
}
另一种解决方案是使用 C# Add ServiceStack Reference 功能,它提供了另一种方法来在客户端项目中获取您的服务类型 DTO,并去除任何特定于服务器的属性。
DTO 应该只依赖于 ServiceStack.Interfaces
ServiceStack.Interfaces.dll
因此每个 .NET 客户端都可以重复使用它们。