Tôi đang sử dụng khung ASP.NET MVC
. Trong khuôn khổ này, chúng tôi đã kiểm tra mọi yêu cầu (url) đến cho một số khóa và gán nó cho một thuộc tính. Chúng tôi đã tạo một lớp tùy chỉnh bắt nguồn từ Controller
lớp & chúng tôi ghi đèOnActionExecuting()
để cung cấp logic tùy chỉnh của chúng tôi.Đọc mọi yêu cầu (URL) trong ASP.NET WEB API
Làm cách nào chúng ta có thể đạt được điều tương tự trong 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);
}
}
Những gì tôi đã cố gắng trong ASP.NET WEB API: - Mặc dù đây đang làm việc, tôi tự hỏi nếu điều này là cách tiếp cận đúng không?
Tạo một bộ điều khiển cơ sở
public class BaseApiController : ApiController
{
public string UserID { get; set; }
}
Tạo một lớp mà được thừa hưởng ActionFilterAttribute lớp & tôi ghi đè 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;
}
}
Bây giờ đăng ký lớp này
public static void Register(HttpConfiguration config)
{
config.Filters.Add(new TokenFilterAttribute());
}
Cảm ơn bạn đã trợ giúp nhanh. Trước khi đăng câu hỏi tôi đã kiểm tra URL này và không chắc chắn điều này sẽ giúp ích gì trong trường hợp của tôi. Bạn có thể vui lòng cho tôi biết thêm chi tiết không. – SharpCoder
Tôi đã cố gắng thêm một chút mã và làm cho nó rõ ràng hơn cho bạn. Trường hợp sử dụng của bạn là gì? Tại sao bạn cần trích xuất UserID từ mỗi yêu cầu? – Regfor
Một số yêu cầu sẽ có 'userId' được chuyển thành chuỗi truy vấn. Tất cả những gì tôi muốn là kiểm tra mọi yêu cầu và nếu chuỗi truy vấn có 'userId', tôi sẽ đọc nó và gán nó cho thuộc tính' UserID' trong 'BaseController'. 'BaseController' sẽ kế thừa từ' ApiController'. Và tất cả các bộ điều khiển của tôi sẽ kế thừa từ 'BaseController'. Mà sẽ đảm bảo tài sản 'UserID' có sẵn cho tất cả các bộ điều khiển. Vấn đề là 'DelegatingHandler' cũng là một lớp, không giống như giao diện' IActionFilter' có sẵn trong ASP.NET MVC – SharpCoder