Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按类型访问ServiceStack requestDto对象_C#_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack - Fatal编程技术网 servicestack,C#,servicestack" /> servicestack,C#,servicestack" />

C# 按类型访问ServiceStack requestDto对象

C# 按类型访问ServiceStack requestDto对象,c#,servicestack,C#,servicestack,我正在使用一个ServiceStack请求过滤器,我想检查requestDTO参数的一个属性。此参数在运行时为强类型,但在编译时为泛型对象 过滤器将用于多个服务调用,因此requestDTO类型将根据调用的服务类型而变化。因此,我无法对其执行特定的强制转换。但是,无论类型如何,requestDTO对象都将始终具有名为“AppID”的字符串属性。我想进入的就是这家酒店 以下是我的代码(当前未编译): 此行不编译: var app = this._appIDs.Apps.Where(x =>

我正在使用一个ServiceStack请求过滤器,我想检查requestDTO参数的一个属性。此参数在运行时为强类型,但在编译时为泛型对象

过滤器将用于多个服务调用,因此requestDTO类型将根据调用的服务类型而变化。因此,我无法对其执行特定的强制转换。但是,无论类型如何,requestDTO对象都将始终具有名为“AppID”的字符串属性。我想进入的就是这家酒店

以下是我的代码(当前未编译):

此行不编译:

 var app = this._appIDs.Apps.Where(x => x.ID == requestDto.AppID).FirstOrDefault();

我是否需要在这里处理反射以访问我的对象,或者是否有某种内置于ServiceStack本身的方式?

将通用功能应用于公共请求DTO时,首选的方法是让它们实现相同的接口,例如:

public interface IHasAppId
{
    public string AppId { get; set; }
}

public class RequestDto1 : IHasAppId { ... }
public class RequestDto2 : IHasAppId { ... }
然后,在过滤器中,您只需执行以下操作:

var hasAppId = requestDto as IHasAppId;
if (hasAppId != null)
{
    //do something with hasAppId.AppId
    ...
}

您也可以避免使用接口而改用反射,但反射速度较慢,可读性较差,因此我建议改用接口。

Gargh,当然。他们已经实现了适当的接口,我太傻了。再次感谢。
var hasAppId = requestDto as IHasAppId;
if (hasAppId != null)
{
    //do something with hasAppId.AppId
    ...
}