C# 我能';当我的筛选器方法为异步时,不要将对象从筛选器传递到控制器。为什么?
我有以下型号: 客户:C# 我能';当我的筛选器方法为异步时,不要将对象从筛选器传递到控制器。为什么?,c#,asp.net-core,.net-core,asp.net-core-mvc,C#,Asp.net Core,.net Core,Asp.net Core Mvc,我有以下型号: 客户: public class Customer { public int CustomerId { get; set; } ... some props } 以及以下存储库模式方法: public async Task<T> GetAsync(Expression<Func<T, bool>> where, string includeProperties = "") { IQueryable<T> qu
public class Customer
{
public int CustomerId { get; set; }
... some props
}
以及以下存储库模式方法:
public async Task<T> GetAsync(Expression<Func<T, bool>> where, string includeProperties = "")
{
IQueryable<T> query = _dbset;
foreach (var includeProperty in includeProperties.Split
(new char[] {','}, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
return await query.FirstOrDefaultAsync(where);
}
但运行后,我有以下异常:
“IncludeCustomerToHttpContext”不是属性
我忘了什么 您可能想看看下面的问题
async void
。由于您没有返回任务
,ASP.NET核心MVC管道不会等待异步调用完成。覆盖OnActionExecutionAsync
,如@Nkosi链接的答案所示。谢谢您的评论,您能检查问题的更新吗?完成)只是忘记继承属性(谢谢您的评论)
public class IncludeCustomerToHttpContext : ActionFilterAttribute
{
public override async void OnActionExecuting(ActionExecutingContext context)
{
var customerRepository = context.HttpContext.RequestServices.GetService<ICustomerRepository>();
var authHeader = context.HttpContext.Request?.Headers["Authorization"].ToString();
if (!Int32.TryParse(authHeader, out int clientId))
{
context.Result = new UnauthorizedResult();
}
var customer = await customerRepository.GetAsync(x => x.CustomerId == clientId, typeof(Application).Name);
if (customer == null)
{
context.Result = new UnauthorizedResult();
}
context.ActionArguments["Customer"] = customer;
}
}
public async Task<IActionResult> Update([FromBody] CustomerChangeViewModel viewModel, Customer customer)
{
...
}
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
var customerRepository = context.HttpContext.RequestServices.GetService<ICustomerRepository>();
var authHeader = context.HttpContext.Request?.Headers["Authorization"].ToString();
if (!Int32.TryParse(authHeader, out int clientId))
{
context.Result = new UnauthorizedResult();
}
var customer = await customerRepository.GetAsync(x => x.CustomerId == clientId, typeof(Application).Name);
if (customer == null)
{
context.Result = new UnauthorizedResult();
}
context.ActionArguments["Customer"] = customer;
await next();
}