【发布时间】:2020-01-26 04:49:43
【问题描述】:
使用的框架是 .Net Core 3.0,但在 2.2 中测试并获得了相同的行为。
我正在使用一个类来自动绑定正文请求属性,并且效果很好,即使它们没有 [FromBody] 属性。
现在,我在这个类中添加了一个新属性,它将匹配标头中的一个属性,如果我直接在控制器中使用它,它就可以工作,如下所示:
public IActionResult Test(TestRequest request, [FromHeader(Name = "Authorization")] string token)
但是,当我尝试通过将 [FromHeader] 属性添加到类属性中来获得相同的结果时,它不起作用。
这里有一个示例代码来说明这个问题:
[ApiController]
[Route("api")]
public class TestController : ControllerBase
{
[HttpPost]
[Route("Test")]
public IActionResult Test(TestRequest request)
{
Console.WriteLine("request.UserId: " + request.UserId);
Console.WriteLine("request.Token: " + request.Token);
return Ok();
}
}
public class TestRequest
{
[FromBody]
public string UserId { get; set; }
[FromHeader(Name = "Authorization")]
public string Token { get; set; }
}
有人遇到过同样的问题吗?
【问题讨论】:
-
你能解开困惑吗,你说在这个类中添加了一个新属性,它将匹配标题中的一个属性,如果我直接在控制器中使用它,它就可以工作,像这样 然后说 我尝试通过将 [FromHeader] 属性添加到类属性中来获得相同的结果,但它不起作用。 - 但在这两种情况下,您都显示相同代码
-
您是否尝试删除
[FromHeader(Name = "Authorization")] string token? -
@JeremyThompson 当然,完整的代码包含两种方法,在控制器和类中使用 FromHeader 属性。这样您就可以看到一个有效的(控制器)和一个无效的(类)。请看我发布的图片以查看结果!
-
@ChetanRanpariya 是的,实际上正如我刚刚向 Jeremy 提到的,这是包含这两种方法的完整代码。我尝试只使用其中一个和两个,但只有一个控制器有效。
-
@LeandroBremer 你有机会查看参考Model Binding in ASP.NET Core
标签: c# asp.net asp.net-core .net-core core-api