C# 将查询和标头参数绑定到同一模型
我正在尝试将查询和标题参数从控制器操作绑定到单个模型: 请求模型:C# 将查询和标头参数绑定到同一模型,c#,asp.net,asp.net-core,asp.net-web-api,model-binding,C#,Asp.net,Asp.net Core,Asp.net Web Api,Model Binding,我正在尝试将查询和标题参数从控制器操作绑定到单个模型: 请求模型: 公共类MyRequest { [FromQuery] 公共字符串查询参数{get;set;} [FromHeader] 公共字符串头参数{get;set;} } 控制器操作: [HttpGet] 公共操作结果操作(MyRequest MyRequest) { ... } 这方面的问题在于: Swagger请求输入json: 即使我尝试curl此端点,也会得到“不支持的媒体类型” 但是,如果我只是在控制器的操作中添加[From
公共类MyRequest
{
[FromQuery]
公共字符串查询参数{get;set;}
[FromHeader]
公共字符串头参数{get;set;}
}
控制器操作:
[HttpGet]
公共操作结果操作(MyRequest MyRequest)
{
...
}
这方面的问题在于:
curl
此端点,也会得到“不支持的媒体类型”public ActionResult FooAction([FromQuery]MyRequest MyRequest)
然后它就如预期的那样工作了。这方面的问题是——不太清楚:“如果有FromHeader字段,为什么要添加FromQuery?”
我可以创建两个单独的模型,一个用于查询参数,另一个用于标题参数,但我真的很想找到一种方法将它们都放在同一个模型中。我建议您阅读相关内容,或者直接转到第节 以下是关于模型绑定源的摘要: 默认情况下,模型绑定以键值对的形式从HTTP请求中的以下来源获取数据:表单字段,请求主体(对于APIController),路由数据,查询字符串参数和上载文件 如果默认源不正确,请使用以下属性之一指定源:
[FromQuery]
,[FromRoute]
,[FromFrom]
,[FromBody]
和[FromHeader]
重要提示:这些属性分别添加到模型属性中(而不是添加到模型类中)
然后,以下代码将适用于您:
public IActionResult FooAction(MyRequest myRequest)
{
return new JsonResult(myRequest);
}
public class MyRequest
{
public string QueryParameter { get; set; }
[FromHeader]
public string HeaderParameter { get; set; }
}
首先,如果要将数据绑定到
HttpGet
中的对象,必须使用[FromQuery]
,否则它将不会绑定到对象。如果数据是string myRequest
而不是myRequest myRequest
,则不需要添加“[FromQuery]”
否则,如果使用HttpPost,它也不需要“[FromQuery]”:
控制器:
[HttpPost("FooAction")]
public ActionResult FooAction(MyRequest myRequest)
{
return Ok();
}
结果:
您如何发送请求?HttpGet还是HttpPost?@SelimYıldız这是一个Get你刚刚从问题中复制粘贴了我的代码,从我看到的。至少在默认情况下,它不起作用。你试过了吗?我已经创建了一个单独的控制器,复制粘贴了您的代码,并且得到了不受支持的媒体类型(如我问题中描述的错误)。基本上,您的意思是,对于HttpGet,我需要添加
[FromQuery]MyRequest
,才能使它正常工作,对吗?这就是我的全部问题:我不想将FromQuery用于具有FromQuery和FromHeader的模型。有办法绕过它吗?
[HttpPost("FooAction")]
public ActionResult FooAction(MyRequest myRequest)
{
return Ok();
}