2012-11-16 30 views
5

Với một phương pháp trong một bộ điều khiển:ASP.NET WebAPI hỗ trợ các loại phương tiện mỗi Phương pháp

public class CustomerController : ApiController 
{ 
    [HttpGet] 
    public CustomerDto GetById([FromUri] int id) 
    { 
     . 
     . 
     return customerDto 
    } 
} 

Có cách nào để xác định hỗ trợ các loại truyền thông với một thuộc tính? Ví dụ, CustomerDto là một lớp phức tạp và sẽ chỉ tuần tự hóa với JSON (application/json) không phải XML (application/xml) nhưng cũng có thể chấp nhận PDF (application/pdf). Có một cái gì đó như thế này:

[HttpGet(Accepts.JSON, Accepts.PDF)] 
    or 
[HttpGet][AcceptJSON][AcceptXML] 
    or 
[HttpGet][Accept("application/json")][Accept("application/pdf")] 

Nếu yêu cầu đến không được hỗ trợ Ngoại lệ/Trạng thái không được hỗ trợ có thể được trả lại.

Lưu ý - Tôi không muốn loại bỏ tuần tự hóa XML nói với nhau như có thể được thực hiện trên toàn cầu. Thay vào đó, tôi muốn xác định những gì được chấp nhận trên mỗi tuyến đường.

Sử dụng - ASP.NET WebAPI RC 1 (cần phải nâng cấp) + Tự Hosting

Trả lời

5

Âm thanh như một ActionFilterAttribute tùy chỉnh có thể làm các trick.

Tạo một lớp mới kế thừa từ System.Web.Http.Filters.ActionFilterAttribute, ghi đè lên phương thức OnActionExecuting. Bên trong phương thức này, bạn có thể kiểm tra các tiêu đề của yêu cầu, tìm kiếm những gì bạn không muốn hỗ trợ và trả về một phản hồi thích hợp.

Phương thức khởi tạo cho tùy chỉnh ActionFilterAttribute của bạn có thể lấy chi tiết về loại "chấp nhận" nào bạn muốn xử lý và loại nào bạn muốn từ chối.

Ví dụ về tùy chỉnh ActionFilterAttribute, hãy kiểm tra this post.

+0

Điều đó nghe như một cách tiếp cận tốt. Cám ơn phản hồi của bạn. –

Các vấn đề liên quan