作者:mingtong77_491_981 | 来源:互联网 | 2023-10-10 22:21
我添加了一个MIddleware,可以拦截到Request.Body(是一个json,其中有一个key是ProjectId),调用方并不会传ProjectId给我,我想能在server端全局给P
我添加了一个MIddleware, 可以拦截到Request.Body(是一个json,其中有一个key是 ProjectId), 调用方并不会传ProjectId给我,我想能在server端全局给ProjectId赋值 ,而不是每一个API方法里面都去赋值ProjectId
public class ApiRequestBase
{
public int ProjectId { get; set; }
public long Id { get; set; }
}
public async Task HandleBusiness(HttpContext context)
{
IHeaderDictionary dic = context.Request.Headers;
var originalRequestBody = context.Request.Body;
using (StreamReader reader = new StreamReader(context.Request.Body, Encoding.UTF8))
{
ApiRequestBase apirequest = JsonConvert.DeserializeObject
(reader.ReadToEnd());
apirequest.ProjectId = 99;
}
}
问题是,我添加了这个MIddleware后, 现在所有的API 在[Frombody]收到的参数都是null了,我该如何把修改后的body继续在middleware中往后传,好像只要我添加了using (StreamReader reader = new StreamReader(context.Request.Body, Encoding.UTF8))这个代码,我全部的api 在frombody拿到的都是null ?
5 个解决方案
要那么复杂干嘛,你设置个BaseController不就行了,内部包含个属性就是你的ProjectId,然后要用这个id的就直接从基类取
MIddleware加不进去,只能退而求其次,建立BaseController,把这个类放到公共组件中,让各个项目的Controller继承一下
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
((BaseRequest)filterContext.ActionArguments["req"]).Operator = 99;
base.OnActionExecuting(filterContext);
}