Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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# 如何使用.NETCore中URI的值填充对象中的字段?_C#_Asp.net Core - Fatal编程技术网

C# 如何使用.NETCore中URI的值填充对象中的字段?

C# 如何使用.NETCore中URI的值填充对象中的字段?,c#,asp.net-core,C#,Asp.net Core,我有一个端点: [Route("cars/{carId}/wheels")] public async Task Post([FromBody] NewWheel wheel) 以下是NewWheel对象: public class NewWheel { public int WheelId; public int CarId; public string BrandName; } 是否有一种方法可以配置.net core,在路由中使用CarId填充NewWheel对

我有一个端点:

[Route("cars/{carId}/wheels")]
public async Task Post([FromBody] NewWheel wheel)
以下是
NewWheel
对象:

public class NewWheel
{
    public int WheelId;
    public int CarId;
    public string BrandName;
}

是否有一种方法可以配置.net core,在路由中使用
CarId
填充
NewWheel
对象中的
CarId
字段,而无需复制路由和请求主体中的
CarId
,或在每个控制器中显式执行此操作?

因为CarId是一个路由值,您需要将其添加为参数

[Route("cars/{carId}/wheels")]
public async Task Post([FromRoute] int carId, [FromBody] NewWheel wheel)
{
      wheel.CarID = carId; //then you can add it to the wheel object if you desire
}

由于carId是一个路由值,因此需要将其作为参数添加

[Route("cars/{carId}/wheels")]
public async Task Post([FromRoute] int carId, [FromBody] NewWheel wheel)
{
      wheel.CarID = carId; //then you can add it to the wheel object if you desire
}

我相信您可以在模型属性上使用模型绑定属性

public class NewWheel {
    public int WheelId { get; set; }
    [FromRoute]
    public int CarId { get; set; }
    public string BrandName { get; set; }
}
还要注意,模型使用的是公共属性,而不是字段

FromRouteAttribute
指定应使用当前请求中的路由数据绑定参数或属性

重点矿山


我相信您可以在模型属性上使用模型绑定属性

public class NewWheel {
    public int WheelId { get; set; }
    [FromRoute]
    public int CarId { get; set; }
    public string BrandName { get; set; }
}
还要注意,模型使用的是公共属性,而不是字段

FromRouteAttribute
指定应使用当前请求中的路由数据绑定参数或属性

重点矿山



它将如何填充尚未创建的对象?或者您的类对象是静态实例?您使用的是实体框架吗?实际的轮子实体是什么样子的?@RyanWilson我不知道.net core在本例中如何创建作为轮子对象传递的对象。我想我的问题是,是否有办法改变这一点。它不是静态实例。它将如何填充尚未创建的对象?或者您的类对象是静态实例?您使用的是实体框架吗?实际的轮子实体是什么样子的?@RyanWilson我不知道.net core在本例中如何创建作为轮子对象传递的对象。我想我的问题是,是否有办法改变这一点。它不是一个静态实例。Op“没有在路由和请求主体中复制CarId,或者显式地”它取决于复制的Op含义。在这种情况下,carID只在路由中发送,不在请求正文中,从而消除了请求内部的重复。这似乎有点奇怪,您现在说的是客户端,在序列化时会显式忽略对象中的字段吗?而服务器端,您明确地破坏了模型绑定,只是为了避免重复?我只是想回答这个问题。就我个人而言,我会使用路线和身体来相互验证。像carId!=carId然后抛出badrequest。@LeeReitz这是有道理的。在我的团队中,我们做到了这一点,但最终感觉我们正在创建额外的工作来验证路由中的id和每个端点的主体中的id匹配。Op“不复制路由和请求主体中的CarId,或者显式地”这取决于复制的Op含义。在这种情况下,carID只在路由中发送,不在请求正文中,从而消除了请求内部的重复。这似乎有点奇怪,您现在说的是客户端,在序列化时会显式忽略对象中的字段吗?而服务器端,您明确地破坏了模型绑定,只是为了避免重复?我只是想回答这个问题。就我个人而言,我会使用路线和身体来相互验证。像carId!=carId然后抛出badrequest。@LeeReitz这是有道理的。在我的团队中,我们做到了这一点,但最终感觉我们正在创建额外的工作来验证路线中的id和每个端点的身体匹配中的id。我在模型的公共属性中添加了[FromRoute]属性。我在路由中而不是正文中创建了一个id为的请求。对象中未填充id。@Anthony和路由名称是否相同?是的,大小写相同。这在过去对你有用吗?@Anthony是的,我在绑定简单模型时没有遇到像你例子中那样的重大问题。我只是遵循了文档中的内容。我实现了您的建议。我在模型的公共属性中添加了[FromRoute]属性。我在路由中而不是正文中创建了一个id为的请求。对象中未填充id。@Anthony和路由名称是否相同?是的,大小写相同。这在过去对你有用吗?@Anthony是的,我在绑定简单模型时没有遇到像你例子中那样的重大问题。我只是遵循了文档中的内容。