C# 执行积垢操作时的层分离
我对我的反序列化逻辑应该去哪里感到困惑 我有一个控制器,专门为GET操作将数据返回到客户端:C# 执行积垢操作时的层分离,c#,.net,json,visual-studio,odata,C#,.net,Json,Visual Studio,Odata,我对我的反序列化逻辑应该去哪里感到困惑 我有一个控制器,专门为GET操作将数据返回到客户端: public accountscontroller:apicontroller { [HttpGet] [Route("", Name = "GetAccount")] public async Task<IHttpActionResult> GetAccount() { var query = Requ
public accountscontroller:apicontroller
{
[HttpGet]
[Route("", Name = "GetAccount")]
public async Task<IHttpActionResult> GetAccount()
{
var query = Request.RequestUri.PathAndQuery.Split('/')[2];
var response = await _accountService.GetAccount(query);
if (response == null)
{
return NotFound();
}
return Ok(response);
}
//morestuff
}
public class AccountController
{
[HttpPost]
[Route("", Name = "CreateAccount")]
public async Task<IHttpActionResult> CreateAccount([FromBody] JObject account)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var response = await _accountService.Create(account);
var newAccount = await response.Content.ReadAsAsync<object>();
return Ok(newAccount);
}
如您所见,反序列化是在AccountService
中处理的,而不是AccountsController
但是,如果我们查看后期操作:
public accountscontroller:apicontroller
{
[HttpGet]
[Route("", Name = "GetAccount")]
public async Task<IHttpActionResult> GetAccount()
{
var query = Request.RequestUri.PathAndQuery.Split('/')[2];
var response = await _accountService.GetAccount(query);
if (response == null)
{
return NotFound();
}
return Ok(response);
}
//morestuff
}
public class AccountController
{
[HttpPost]
[Route("", Name = "CreateAccount")]
public async Task<IHttpActionResult> CreateAccount([FromBody] JObject account)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var response = await _accountService.Create(account);
var newAccount = await response.Content.ReadAsAsync<object>();
return Ok(newAccount);
}
您将看到,事实上,反序列化发生在控制器级别
如何封装CRUD操作的反序列化逻辑,如GET/PUT/POST以实现一致性?您可以将其抽象到可注入服务后面。第二个代码段使用http内容的扩展方法,该方法在后台也使用Json.Net。你的担忧混杂在一起。如果你直接访问数据,你就不必对数据进行反序列化,对吗?但是,由于您正在访问第二个api并接收json,而且您似乎只需要部分信息“return value.value.FirstOrDefault();”,因此我认为将该逻辑隐藏在服务中而不是留在控制器上是有意义的。您将其抽象到可注入服务之后。第二个代码段使用http内容的扩展方法,该方法在后台也使用Json.Net。你的担忧混杂在一起。如果你直接访问数据,你就不必对数据进行反序列化,对吗?但是,由于您正在访问第二个api并接收json,而且您似乎只需要部分信息“return value.value.FirstOrDefault();”,因此我认为在服务中隐藏该逻辑而不是将其留在控制器上是有意义的。