【发布时间】:2017-09-28 15:09:36
【问题描述】:
我有使用 FromBody 接受 POST 消息的工作 REST 代码。收到的参数是我需要使用的对象。现在,我需要检查标题中的授权。我认为可以通过将参数从对象切换到 HttpRequestMessage 来解决这个问题。当然,现在必须将消息的内容转换为原始对象,我很难弄清楚。
原来的方法如下:
[HttpPost]
public IHttpActionResult Post([FromBody] CardStatusRoot cardStatus)
{
try
{
if (cardStatus == null)
{
return BadRequest("Card data not provided");
}
if (cardStatus.Data.TransactionType.ToLower() == "card")
{
//... Process;
}
}
catch (Exception ex)
{
try
{
// Log the failure to fund the card
}
catch { }
return InternalServerError();
}
return Ok();
}
新代码,使用 HttpRequestMessage:
[HttpPost]
public IHttpActionResult Post(HttpRequestMessage request)
{
// Get the authentication from the header
var encoding = Encoding.GetEncoding("UTF-8");
var authValue = encoding.GetString(Convert.FromBase64String(request.Headers.Authorization.Parameter));
var validAuthorization = ConfigurationManager.AppSettings["ValidKey"];
if (authValue != validAuthorization)
{
return BadRequest("Not Authorized");
}
// This does NOT compile - Need help converting request.Content to a CardStatusRoot object
CardStatusRoot cardStatus = (CardStatusRoot)request.Content.ReadAsStringAsync().Result;
... Same as first method
}
如何将请求的内容转换为 CardStatusRoot 对象?
【问题讨论】:
-
您可以同时拥有这两个参数,例如:
Post([FromBody] CardStatusRoot cardStatus, HttpRequestMessage request)
标签: c# rest serialization httprequest deserialization