在 ActionFilterAttribute 的OnActionExecutionAsync 中使用如下代碼從流中讀取用戶參數
//從文件流中讀取傳遞測參數
using (var ms = new MemoryStream())
{
context.HttpContext.Request.Body.Seek(0, 0);//將讀取指針迻到開始位置
context.HttpContext.Request.Body.CopyTo(ms);
var b = ms.ToArray();
var postParamsString = Encoding.UTF8.GetString(b);
}
雖然以前就知道是從流中讀取,但是.net core的比較難找,找了將近兩個小時才找到從流中讀取參數的方法,關鍵是這句:context.HttpContext.Request.Body.Seek(0, 0);不然讀取的內容為空
完整代碼
public class SignValidateAttribute : ActionFilterAttribute
{
#region
/// <summary>
///
/// </summary>
/// <param name="context"></param>
/// <param name="next"></param>
/// <returns></returns>
public async override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
//從文件流中讀取傳遞測參數
using (var ms = new MemoryStream())
{
context.HttpContext.Request.Body.Seek(0, 0);
context.HttpContext.Request.Body.CopyTo(ms);
var b = ms.ToArray();
var postParamsString = Encoding.UTF8.GetString(b);
await next();
}
}
/// <summary>
///
/// </summary>
/// <param name="context"></param>
/// <param name="next"></param>
/// <returns></returns>
public override Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
{
//string dataJson = GetContextJson(context.);
return base.OnResultExecutionAsync(context, next);
}
#endregion
}
