ServiceStack导出c# dto类到dtos.ts文件



如何在dtos中导出c#类(DTO) ?在请求类中不引用npm run typescript-ref http://localhost:5000 src/myproject生成的ts文件?

注意:我们有几个c# DTO类(MutationAddressChange, MutationCEOChange…),我们使用automapper映射到域类。所以我们希望在Angular中也使用c# DTO类来填充相应的类型(例如MutationAddressChangesCreateDTO)并将其发送到web服务器。因此,在CreateMutationRequest类中,我们接受一个对象,而不是一个特定的类。

DTO-Class例子:

public class MutationAddressChangesCreateDTO
{
public string Street { get; set; }
public string POBox { get; set; }
public string Zipcode { get; set; }
}

ServiceStack Request-Class

public class CreateMutationRequest : IPost
{
public object Mutation { get; set; }
}

Angular预期用途:

{
var mutationAddressChangesCreateDTO= new MutationAddressChangesCreateDTO();
mutationAddressChangesCreateDTO.dateOfMutation = ...
const request = new CreateMutationRequest ({
mutation: mutationAddressChangesCreateDTO,
});
this.client.post(request)
...
}

Add ServiceStack Reference特性的一个限制是,你的dto不能有任何对象或接口属性,这会在你的服务契约中创建一个黑洞,从而不可能为其生成类型化API。

我建议不要在dto中使用任何对象或接口属性,这些属性不仅是运行时问题的来源,而且还受到安全限制的限制。

您可以使用像Dictionary<string,string>这样的无类型数据结构来存储任意值,您可以在此客户论坛线程中找到其他替代方案。

虽然它不鼓励你仍然可以在你的ServiceStack请求dto中有object属性,你只是不能为它们生成一个类型化的API,但你仍然应该能够将它们作为匿名参数发送,例如:

this.client.post(request, { mutation: dto });

对象属性在默认情况下由JS Utils处理,它应该将其反序列化为Dictionary<string,object>,你应该能够使用ServiceStack的反射Utils转换回c#类型,例如:

public object Any(CreateMutationRequest request)
{
var payload = request.Mutation as Dictionary<string,object>;
var payloadRequest = payload.FromObjectDictionary(typeof(TheType));
}

避免使用object的类似方法是在string属性中发送序列化的JSON有效负载,例如:

request.mutation = JSON.stringify(payload);

你可以再次使用JS Utils反序列化,例如:

public object Any(CreateMutationRequest request)
{
var payload = JSON.parse(request.Mutation);
var payloadRequest = payload.FromObjectDictionary(typeof(TheType));
}

话虽如此,我不推荐任何这些非类型化策略,我会亲自为每个需要的API创建类型化服务,这更直观,更容易发现& &;使用ServiceStack的自动映射和. net强大的反射功能,任何共享的功能都可以在你的服务实现中轻松处理。

相关内容

  • 没有找到相关文章

最新更新