通过 id 实例化 dto 对象,其中对象作为有效负载 C# 接收
Instantiate dto object by id where object received as payload C#
在 DTO JSON 中有一个任务控制器函数接收负载。现在是插入还是更新是基于有效载荷数据中收到的 id。如何实例化id值对象
任务控制器:
async Task<Response<RequestDto>> UpdateRequest([FromBody]RequestDto req)
我必须 update/insert 基于请求对象 ID 值。
我应该使用构造函数来 RequestDto 还是通过 null 检查分配 id 值
EDIT
这里的DTO结构:
namespace MyWorkspace.ProjectA.Domain
{
/// <summary>
/// Request DTO
/// </summary>
public class RequestDto
{
/// <summary>
/// Request Id
/// </summary>
[RegularExpression(Constants.GuidRegex)]
public string RequestId { get; set; }
[JsonConverter(typeof(StringEnumConverter))]
public RequestDetails RequestDetails { get; set; }
public DateTime OpenDate { get; set; }
**public RequestDto()
{
RequestId = Guid.NewGuid().ToString("N");
}**
}
}
现在我必须 update/insert 基于 ID 的请求,其中 2 种类型的请求负载可以通过以下方式出现:
1. {
"reqId": "",
"requestDetails": {
"basicDetails": {
"firstName": "Something",
"lastName": "Something",
"emailAddress": "Something",
},
"addressDetails": {
"addLine1": "Something",
"addLine2": "Something",
"city": "Something",
"state": "Something",
"country": "Something",
}
},
"openDate": "2019-07-05T09:59:18.601Z",
}
2. {
"reqId": "0b5c7dd3931944b28f693ef8bf6fa2ad",
"requestDetails": {
"basicDetails": {
"firstName": "Something",
"lastName": "Something",
"emailAddress": "Something",
},
"addressDetails": {
"addLine1": "Something",
"addLine2": "Something",
"city": "Something",
"state": "Something",
"country": "Something",
}
},
"openDate": "2019-07-05T09:59:18.601Z",
}
问题:我需要 DTO 中的构造函数吗?我如何将 ID 分配给 DTO 对象/或者我应该分配一个新的 ID 以防空白:
public async Task<Response<RequestDto>> UpdateRequest([FromBody]RequestDto req)
{
req.RequestId = (req.RequestId == null || req.RequestId == "") ? Guid.NewGuid().ToString("N") : req.RequestId;
_validatorObj.ValidateAndThrow(req, ruleSet: "RequestValidation");
var result = await _repository.UpsertRequest(req);
return Response<RequestDto>.Ok(result, "Success");
}
回购中的代码:
public async Task<RequestDto> UpsertRequest(RequestDto req)
{
var jsonReqDet = JsonConvert.SerializeObject(req.requestDetails);
var entity = _mapper.Map<RequestEntity>(req);
entity.RowKey = RequestEntity.GetRowKey(req.RequestId);
entity.PartitionKey = RequestEntity.GetPartKey(req.RequestId);
entity.RequestDetails = jsonReqDet;
entity.OpenDate = DateTime.UtcNow;
await AzureTableAdapter.Upsert(entity, RequestTableName);
return req;
}
注:
- 我正在有效负载中获取整个 DTO 对象
- 我正在使用 Azure 存储和 "InsertOrReplace" 操作
- 我有请求 table,其中 requestDetils 字段为字符串,以保持 json 值
我该怎么办?
终于
我发现我做错了什么。有效负载包含 reqId=""
。所以即使我有一个构造函数:
public RequestDto()
{
RequestId = Guid.NewGuid().ToString("N");
}
在初始化之后,由于控制器签名:
public async Task<Response<RequestDto>> UpdateRequest([FromBody]RequestDto req)
id初始化为null。所以我只从有效负载中删除了 reqId(在插入期间)。我现在接受的最终负载:
1. {
"requestDetails": {
"basicDetails": {
"firstName": "Something",
"lastName": "Something",
"emailAddress": "Something",
},
"addressDetails": {
"addLine1": "Something",
"addLine2": "Something",
"city": "Something",
"state": "Something",
"country": "Something",
}
},
"openDate": "2019-07-05T09:59:18.601Z",
}
2. {
"reqId": "0b5c7dd3931944b28f693ef8bf6fa2ad",
"requestDetails": {
"basicDetails": {
"firstName": "Something",
"lastName": "Something",
"emailAddress": "Something",
},
"addressDetails": {
"addLine1": "Something",
"addLine2": "Something",
"city": "Something",
"state": "Something",
"country": "Something",
}
},
"openDate": "2019-07-05T09:59:18.601Z",
}
在 DTO JSON 中有一个任务控制器函数接收负载。现在是插入还是更新是基于有效载荷数据中收到的 id。如何实例化id值对象
任务控制器:
async Task<Response<RequestDto>> UpdateRequest([FromBody]RequestDto req)
我必须 update/insert 基于请求对象 ID 值。
我应该使用构造函数来 RequestDto 还是通过 null 检查分配 id 值
EDIT
这里的DTO结构:
namespace MyWorkspace.ProjectA.Domain
{
/// <summary>
/// Request DTO
/// </summary>
public class RequestDto
{
/// <summary>
/// Request Id
/// </summary>
[RegularExpression(Constants.GuidRegex)]
public string RequestId { get; set; }
[JsonConverter(typeof(StringEnumConverter))]
public RequestDetails RequestDetails { get; set; }
public DateTime OpenDate { get; set; }
**public RequestDto()
{
RequestId = Guid.NewGuid().ToString("N");
}**
}
}
现在我必须 update/insert 基于 ID 的请求,其中 2 种类型的请求负载可以通过以下方式出现:
1. {
"reqId": "",
"requestDetails": {
"basicDetails": {
"firstName": "Something",
"lastName": "Something",
"emailAddress": "Something",
},
"addressDetails": {
"addLine1": "Something",
"addLine2": "Something",
"city": "Something",
"state": "Something",
"country": "Something",
}
},
"openDate": "2019-07-05T09:59:18.601Z",
}
2. {
"reqId": "0b5c7dd3931944b28f693ef8bf6fa2ad",
"requestDetails": {
"basicDetails": {
"firstName": "Something",
"lastName": "Something",
"emailAddress": "Something",
},
"addressDetails": {
"addLine1": "Something",
"addLine2": "Something",
"city": "Something",
"state": "Something",
"country": "Something",
}
},
"openDate": "2019-07-05T09:59:18.601Z",
}
问题:我需要 DTO 中的构造函数吗?我如何将 ID 分配给 DTO 对象/或者我应该分配一个新的 ID 以防空白:
public async Task<Response<RequestDto>> UpdateRequest([FromBody]RequestDto req)
{
req.RequestId = (req.RequestId == null || req.RequestId == "") ? Guid.NewGuid().ToString("N") : req.RequestId;
_validatorObj.ValidateAndThrow(req, ruleSet: "RequestValidation");
var result = await _repository.UpsertRequest(req);
return Response<RequestDto>.Ok(result, "Success");
}
回购中的代码:
public async Task<RequestDto> UpsertRequest(RequestDto req)
{
var jsonReqDet = JsonConvert.SerializeObject(req.requestDetails);
var entity = _mapper.Map<RequestEntity>(req);
entity.RowKey = RequestEntity.GetRowKey(req.RequestId);
entity.PartitionKey = RequestEntity.GetPartKey(req.RequestId);
entity.RequestDetails = jsonReqDet;
entity.OpenDate = DateTime.UtcNow;
await AzureTableAdapter.Upsert(entity, RequestTableName);
return req;
}
注:
- 我正在有效负载中获取整个 DTO 对象
- 我正在使用 Azure 存储和 "InsertOrReplace" 操作
- 我有请求 table,其中 requestDetils 字段为字符串,以保持 json 值
我该怎么办?
终于
我发现我做错了什么。有效负载包含 reqId=""
。所以即使我有一个构造函数:
public RequestDto()
{
RequestId = Guid.NewGuid().ToString("N");
}
在初始化之后,由于控制器签名:
public async Task<Response<RequestDto>> UpdateRequest([FromBody]RequestDto req)
id初始化为null。所以我只从有效负载中删除了 reqId(在插入期间)。我现在接受的最终负载:
1. {
"requestDetails": {
"basicDetails": {
"firstName": "Something",
"lastName": "Something",
"emailAddress": "Something",
},
"addressDetails": {
"addLine1": "Something",
"addLine2": "Something",
"city": "Something",
"state": "Something",
"country": "Something",
}
},
"openDate": "2019-07-05T09:59:18.601Z",
}
2. {
"reqId": "0b5c7dd3931944b28f693ef8bf6fa2ad",
"requestDetails": {
"basicDetails": {
"firstName": "Something",
"lastName": "Something",
"emailAddress": "Something",
},
"addressDetails": {
"addLine1": "Something",
"addLine2": "Something",
"city": "Something",
"state": "Something",
"country": "Something",
}
},
"openDate": "2019-07-05T09:59:18.601Z",
}