C# .NET Core 3.1/React模板-REST API类-JSON结果中的忽略属性
我有一个关于C#Core 3.1的项目,其中React和Redux模板,其中EF Core用于DB。我需要从通过RESTAPI控制器发送的DTO类中排除Id 我需要为与负载相关的类vie EF Core使用Id,但我没有在REST API结果中显示:C# .NET Core 3.1/React模板-REST API类-JSON结果中的忽略属性,c#,json,asp.net-core,react-redux,C#,Json,Asp.net Core,React Redux,我有一个关于C#Core 3.1的项目,其中React和Redux模板,其中EF Core用于DB。我需要从通过RESTAPI控制器发送的DTO类中排除Id 我需要为与负载相关的类vie EF Core使用Id,但我没有在REST API结果中显示: { "id": 1, -- DISABLE to show "product": "TEST1" } C#类: public class ProductResDto {
{
"id": 1, -- DISABLE to show
"product": "TEST1"
}
C#类:
public class ProductResDto
{
public int Id { get; set; } // DISABLE to show in REST API result
public string Product{ get; set; }
}
// GET api/<ProductController>
[HttpPost]
public async Task<IActionResult> Post(ProductReqDto model)
{
try
{
var product = await _context.Products
.OrderBy(b => b.Name)
.Where(w => w.Name == model.Name)
.Select(c => new ProductResDto
{
Id = c.Id,
Product = c.Name
}).FirstAsync();
// Grades
product.Grades = ''; // LOAD ADD. INFO (use product.Id like FK in DB)
// Description
product.Descriptions = ''; // LOAD ADD. INFO (use product.Id like FK in DB)
// Files
product.Files = ''; // LOAD ADD. INFO (use product.Id like FK in DB)
// Parameters
product.Parameters = ''; // LOAD ADD. INFO (use product.Id like FK in DB)
return Ok(product);
}
catch (Exception e)
{
return NotFound();
}
}
控制器:
public class ProductResDto
{
public int Id { get; set; } // DISABLE to show in REST API result
public string Product{ get; set; }
}
// GET api/<ProductController>
[HttpPost]
public async Task<IActionResult> Post(ProductReqDto model)
{
try
{
var product = await _context.Products
.OrderBy(b => b.Name)
.Where(w => w.Name == model.Name)
.Select(c => new ProductResDto
{
Id = c.Id,
Product = c.Name
}).FirstAsync();
// Grades
product.Grades = ''; // LOAD ADD. INFO (use product.Id like FK in DB)
// Description
product.Descriptions = ''; // LOAD ADD. INFO (use product.Id like FK in DB)
// Files
product.Files = ''; // LOAD ADD. INFO (use product.Id like FK in DB)
// Parameters
product.Parameters = ''; // LOAD ADD. INFO (use product.Id like FK in DB)
return Ok(product);
}
catch (Exception e)
{
return NotFound();
}
}
//获取api/
[HttpPost]
公共异步任务Post(ProductReqDto模型)
{
尝试
{
var product=wait\u context.Products
.OrderBy(b=>b.Name)
.Where(w=>w.Name==model.Name)
.选择(c=>new ProductResDto
{
Id=c.Id,
产品=c.名称
}).FirstAsync();
//等级
product.Grades='';//加载ADD.INFO(使用product.Id,如数据库中的FK)
//描述
product.Descriptions='';//加载ADD.INFO(使用product.Id,如数据库中的FK)
//档案
product.Files='';//加载ADD.INFO(使用product.Id,如数据库中的FK)
//参数
product.Parameters='';//加载ADD.INFO(使用product.Id,如数据库中的FK)
返回Ok(产品);
}
捕获(例外e)
{
返回NotFound();
}
}
是否有可能在wait\u上下文中为REST API结果或加载禁用此参数。使用.Select()
2个对象:一个仅用于ID,另一个用于ProductResDto
谢谢你更新你的课程如下
public class ProductResDto
{
[System.Text.Json.Serialization.JsonIgnore]
public int Id { get; set; }
public string Product { get; set; }
}
我看到了不同的解决方案:
使用
在Id
属性上,如下所示:
using System.Text.Json.Serialization;
public class ProductResDto
{
[JsonIgnore]
public int Id { get; set; }
public string Product { get; set; }
}
为您的应用程序创建包含所有
OutCountract
型号。因此,您的合同模型将不包含
Id
属性:
public class ProductResOutContract
{
public string Product { get; set; }
}
并像这样利用它:
// GET api/<ProductController>
[HttpPost]
public async Task<IActionResult> Post(ProductReqDto model)
{
try
{
var product = await _context.Products
.OrderBy(b => b.Name)
.Where(w => w.Name == model.Name)
.Select(c => new ProductResDto
{
Id = c.Id,
Product = c.Name
}).FirstAsync();
// Grades
product.Grades = ''; // LOAD ADD. INFO (use product.Id like FK in DB)
// Description
product.Descriptions = ''; // LOAD ADD. INFO (use product.Id like FK in DB)
// Files
product.Files = ''; // LOAD ADD. INFO (use product.Id like FK in DB)
// Parameters
product.Parameters = ''; // LOAD ADD. INFO (use product.Id like FK in DB)
var productOutContract = ConvertToOutCountract(product);
return Ok(productOutContract);
}
catch (Exception e)
{
return NotFound();
}
}
private static ProductReqOutContract ConvertToOutCountract(ProductReqDto product)
{
var outCountract = new ProductOutContract
{
// Fill the properties;
};
return outCountract;
}
//获取api/
[HttpPost]
公共异步任务Post(ProductReqDto模型)
{
尝试
{
var product=wait\u context.Products
.OrderBy(b=>b.Name)
.Where(w=>w.Name==model.Name)
.选择(c=>new ProductResDto
{
Id=c.Id,
产品=c.名称
}).FirstAsync();
//等级
product.Grades='';//加载ADD.INFO(使用product.Id,如数据库中的FK)
//描述
product.Descriptions='';//加载ADD.INFO(使用product.Id,如数据库中的FK)
//档案
product.Files='';//加载ADD.INFO(使用product.Id,如数据库中的FK)
//参数
product.Parameters='';//加载ADD.INFO(使用product.Id,如数据库中的FK)
var productOutContract=转换为OutCountract(产品);
返回Ok(productOutContract);
}
捕获(例外e)
{
返回NotFound();
}
}
私有静态ProductReqOutContract转换为输出计数契约(ProductReqDto product)
{
var outCountract=新产品OutContract
{
//填充属性;
};
回报率;
}
返回Id也不错。你应该把模型放在上面
正确地安装前端
我喜欢第二种或第三种解决方案。当API层和数据层分开时,这一点更为明显。在向客户端发送Dto之前,请将其值设置为零。是否需要从JSON响应中排除该属性?如果是这样,您可以使用[JsonIgnore]属性。将DTO属性设置为零或Null不是正确的解决方案。NewtonJson库中只有JsonIgnor,但在这种情况下不是wokIn,我必须安装一些Nuget包吗?因为VS不识别Json,所以NewtonJson中只有JsonIgnore引用。libI必须安装Nuget包[System.Text.Json.Serialization],在这之后工作正常,我看不到Id属性,默认情况下THXdefault ASP.NET核心模板已经使用System.Text.Json