2012-04-26 27 views
11

Bối cảnh:Tương đương với [Bind (Prefix = "principalId")] trong MVC4 Web Api?

Trong MVC3, tôi đã sử dụng cú pháp sau đây để xác định tùy chỉnh Action tên tham số:

public ActionResult ActionName([Bind(Prefix = "principalID")] int userID, 
           [Bind(Prefix = "dependentID")] long applicationID) 

Các tuyến đường cho hành động này được định nghĩa như sau (ActionNameConstraint là một phong tục IRouteConstraint) :

routes.MapHttpRoute(
    "DependantAction", 
    "{controller}/{principalID}/{action}/{dependentID}", 
    new {controller = @"[^0-9]+", action = ActionNameConstraint.Instance, dependentID = RouteParameter.Optional} 
    ); 

Câu hỏi:

BindAttribute là lớp System.Web.Mvc. Có tương đương với điều này (tham số ràng buộc) trong Web Api không?

Tất nhiên, nếu có các giải pháp khác để đạt được kết quả tương tự, tôi rất muốn nghe chúng!

Trả lời

-2

Tôi hiểu rằng trong WebAPI bạn chỉ sử dụng cơ sở lớp điều khiển đặc biệt và các tên Hành động đặc biệt, nhưng sau khi tất cả chúng là bộ điều khiển và hành động.

Bạn đã thử và nó không hoạt động? Một cái nhìn lướt qua bài viết này dường như cho thấy ràng buộc nói chung (không phải là thuộc tính cụ thể mặc dù) mô hình nên làm việc bình thường:

http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx

Edit:

Một số người nói này nên làm việc với MVC chỉ và downvoted câu trả lời. Ở đây bạn đi, liệu tham khảo khác:

+0

Tôi đã đánh giá bài viết đó thực sự, nó không thực sự đạt mục đích tương tự - bài viết chủ yếu bao gồm mô hình ràng buộc (hầu hết các tìm kiếm của tôi đã dẫn đến kết quả về mô hình ràng buộc thực sự) – diaho

+1

ASP.NET Web API không có chức năng 'BindAttribute' được tích hợp. Ràng buộc tham số hành động được thực hiện với tính năng ràng buộc và định dạng mô hình của API Web. Vì vậy, nó không chỉ là chất kết dính mô hình. Một mẹo khác ở đây là: không sử dụng bất kỳ thứ gì trong không gian tên 'System.Web.Mvc' với ASP.NET Web API.99% thời gian, bạn sẽ gặp rắc rối nếu bạn làm điều này. – tugberk

+0

Kiểm tra câu trả lời cập nhật. – Meligy

5

Bạn có thể sử dụng thuộc tính System.Web.Http.FromUriAttribute để xác định tên tham số được sử dụng để mô hình ràng buộc.

public ActionResult ActionName(
        [FromUri(Name = "principalID.userID")] int userID, 
        [FromUri(Name= "dependentID.applicationID")] long applicationID 
        ) 

FromUri yêu cầu ràng buộc mô hình để kiểm tra chuỗi truy vấn và yêu cầu RouteData.

+1

Thật không may, phương pháp này chỉ hoạt động cho các khoản bao gồm. Nếu bạn muốn chỉ định loại trừ, bạn sẽ tự mình loại bỏ. –

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