我正在使用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