2014-06-27 14 views
5

Tôi có giao diện API Web Tôi đang cố gắng thích ứng với kiến ​​trúc nhiều bên thuê. Trước đây, chúng tôi đã có một chế độ WCF, theo đó chúng tôi đã chuyển một tham số, id ứng dụng, đến dịch vụ, sau đó lưu trữ thông tin này để sử dụng trong mã sau này. Điều này có nghĩa là Client Id không phải là tham số đầu tiên được truyền cho mọi cuộc gọi.Tôi làm cách nào để thực thi mã trước (MỌI) hành động API Web?

Tôi muốn làm điều tương tự với Web API, ví dụ, thay vì phải:

GetDocument (int ClientId, int documentId) GetDefault (int ClientId) GetImage (int ClientId, int ImageID)

có chỉ:

GetDocument (int documentId) GetDefault() GetImage (int ImageID)

Nhưng tôi cần một số cách t o làm như sau:

  1. Lấy ClientId từ con đường
  2. Đặt giá trị này vào đối tượng nhà nước tôi đã có

Tất cả trước khi cuộc gọi thực sự được thực thi. Tôi nghĩ rằng tuyến đường sẽ được viết lại - tôi ổn với tuyến đường phải có id khách hàng trong đó, không phải API của tôi. Vì vậy, các cuộc gọi đến GetDefault có thể trông giống như:

/Document/GetDefault/1

khi API là

GetDefault()

Suy nghĩ? TIA.

+0

Bạn có thể thử một phong tục 'ActionFilter', hoặc thậm chí một' MessageHandler'. –

+0

Tôi nhanh chóng giả lập một cách tiếp cận bằng cách sử dụng chuỗi truy vấn cho clientid, và nó có vẻ là làm việc, nhưng không có trạng thái phiên, đó là nơi tôi đã đặt id khách hàng. Tôi nghi ngờ rằng đây là một thứ tự hoạt động, theo đó trạng thái phiên không tồn tại khi MessageHandler được kích hoạt. Tình trạng phiên làm việc tốt sau này (tôi đã chỉ định một HttpControllerHandler mà thực hiện IRequiresSessionState) ... –

+0

bình luận của bạn là một câu trả lời thỏa đáng cho câu hỏi của tôi, rào cản tiếp theo của tôi mặc dù. Thêm nó như là một câu trả lời và tôi sẽ chấp nhận nó. –

Trả lời

12

Một cách tiếp cận sẽ là ActionFilter tùy chỉnh. Xem here, mặc dù đó là về MVC khái niệm này là giống hệt nhau để WebAPI:

ASP.NET MVC cung cấp lọc hành động để thực hiện lọc Logic trước hoặc sau khi một phương pháp hành động được gọi. Bộ lọc hành động là các thuộc tính tùy chỉnh cung cấp phương tiện khai báo để thêm hành động trước và hành vi sau hành động vào các phương thức hành động của bộ điều khiển.

Ví dụ:

public class MyActionFilter : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(HttpActionContext actionContext) 
     { 
      //.... 
     } 

     public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
     { 
      //.... 
     } 
    } 

Và sử dụng mà làm trang trí điều khiển API của bạn/hành động:

[MyActionFilter] 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 
Các vấn đề liên quan