C# 在Web API Asp.net的自定义筛选器中获取WebHostHttpRequestContext
我目前正在尝试在我的Web API中编写一个自定义过滤器,当用户根据其上次活动时间戳发出请求时,该过滤器允许我更新数据库。要做到这一点,我需要访问他们的用户名,该用户名在WebHostHttpRequestContext中可用,并且在调试和深入几层时可以查看,但我似乎不知道如何使用代码访问它 知道我如何访问这个对象并从中获取值吗?这是我目前正在做的工作C# 在Web API Asp.net的自定义筛选器中获取WebHostHttpRequestContext,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我目前正在尝试在我的Web API中编写一个自定义过滤器,当用户根据其上次活动时间戳发出请求时,该过滤器允许我更新数据库。要做到这一点,我需要访问他们的用户名,该用户名在WebHostHttpRequestContext中可用,并且在调试和深入几层时可以查看,但我似乎不知道如何使用代码访问它 知道我如何访问这个对象并从中获取值吗?这是我目前正在做的工作 using System; using System.Collections.Generic; using System.Linq; using
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http.Filters;
using MyWebAPI.Models.DAL;
namespace MyWebAPI.App_Service
{
public class MyActionFilter : System.Web.Http.Filters.ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
var principal = actionExecutedContext.Response.Content;
//using (var db = new databaseContext())
//{
// var dbUser = (from b in db.AspNetUsers
// where b.UserName == principal.Identity.Name
// select b).First();
// dbUser.LastActivity = DateTime.Now;
// db.SaveChanges();
//}
}
}
}
如果你要找的是校长。尝试通过
HttpActionExecutedContext.ActionContext.RequestContext.Principal
访问它。如果已对请求进行身份验证并且已将用户主体分配给该请求,则应填充该请求
namespace MyWebAPI.App_Service {
public class MyActionFilter : System.Web.Http.Filters.ActionFilterAttribute {
public override void OnActionExecuted(System.Web.Http.Filters.HttpActionExecutedContext actionExecutedContext) {
var principal = actionExecutedContext.ActionContext.RequestContext.Principal;
if(principal != null) {
using (var db = new databaseContext()) {
var dbUser = (from b in db.AspNetUsers
where b.UserName == principal.Identity.Name
select b).First();
dbUser.LastActivity = DateTime.Now;
db.SaveChanges();
}
}
}
}
}
尽管该类是内部的,但您可以将WebHostHttpContext对象视为动态对象,并从actionExecutedContext.Request.Properties[“MS_RequestContext”]获取它 例如,当我需要来自请求上下文的原始HttpRequestWrapper(以获取POST body数据)时,下面的代码起作用
dynamic requestContext = actionContext.Request.Properties["MS_RequestContext"];
var requestWrapper = (HttpRequestWrapper)requestContext.Context.Request;
这太棒了,谢谢你,我现在没有机会尝试,但明天会尝试,但这正是我今天一直在寻找的,谢谢!