我正在使用ASP.NET MVC
框架。在这个框架中,我们检查了每个传入请求(url)的某个键并将其分配给一个属性。我们创建了一个自定义类,该类自Controller
类&我们覆盖OnActionExecuting()
提供我们的自定义逻辑。在ASP.NET WEB API中读取每个传入请求(URL)
我们如何才能在ASP.NET WEB API中实现相同?
//Implementation from ASP.NET MVC
public class ApplicationController : Controller
{
public string UserID { get; set; }
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!string.IsNullOrEmpty(Request.Params["uid"]))
UserID = Request.Params["uid"];
base.OnActionExecuting(filterContext);
}
}
我曾尝试在ASP.NET WEB API: - 虽然这是工作,我不知道这是正确的做法?
创建一个基本控制器
public class BaseApiController : ApiController
{
public string UserID { get; set; }
}
创建另一类它继承ActionFilterAttribute类&我重写OnActionExecuting()
public class TokenFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
var queryString = actionContext.Request.RequestUri.Query;
var items = HttpUtility.ParseQueryString(queryString);
var userId = items["uid"];
((MyApi.Data.Controllers.BaseApiController)(actionContext.ControllerContext.Controller)).UserID = userId;
}
}
查阅注册该类
public static void Register(HttpConfiguration config)
{
config.Filters.Add(new TokenFilterAttribute());
}
谢谢你的快速帮助。在发布这个问题之前,我正在检查这个URL,不确定这对我的情况会有什么帮助。你能否给我更多的细节。 – SharpCoder 2014-09-02 09:50:26
我试着添加一点点代码,并让它更清晰。你的用例是什么?为什么你需要从每个请求中提取UserID? – Regfor 2014-09-02 12:41:15
某些请求会将'userId'作为查询字符串传递。我只想检查每个请求,如果查询字符串具有'userId',我将读取它并将其分配给'BaseController'中的'UserID'属性。 'BaseController'将从'ApiController'继承。而我的所有控制器都将从'BaseController'继承。这将确保'UserID'属性可用于所有控制器。问题是'DelegatingHandler'也是一个类,与ASP.NET MVC中提供的'IActionFilter'接口不同 – SharpCoder 2014-09-02 12:52:42