Tôi đang cố gắng sử dụng OutputCaching trong trang web ASP.NET MVC của mình. Vấn đề là, khi tôi thử và thay đổi giá trị của một tham số chuỗi truy vấn của tôi, nó trả về dữ liệu cho mục đầu tiên đã được yêu cầu!Caching không hoạt động ngay trong trang ASP.NET MVC của tôi?
Dưới đây là mã của tôi (với tên param thay đổi) ...
[ApiAuthorize]
[HandleErrorAsJson]
public class SearchController : Controller
{
[AcceptVerbs(HttpVerbs.Get)]
[OutputCache(Duration = 60, VaryByParam = "*")]
public ActionResult ScoreCard(string foo, byte? bar, byte? pewpew)
{
..
}
}
- LƯU Ý 1: ApiAuthorize - thuộc tính tùy chỉnh để kiểm tra cho một param chuỗi truy vấn gọi là 'chính' và kiểm tra một trong từ điển bộ nhớ, để xem nó có tồn tại không.
- CHÚ Ý 2: HandleErrorAsJson - thuộc tính tùy chỉnh trả về thông báo lỗi là json nếu một ngoại lệ được/được ném.
và đây là hai cuộc gọi mẫu tôi là làm cho hành động này: -
- /GET http://api.MySite.com/search/scorecard?foo=hello+world,+PewPew&key=abcd1234&bar=2
- /GET http://api.MySite.com/search/scorecard?foo=invalid+search+stuff&key=abcd1234&bar=2
nên các dữ liệu từ các cuộc gọi đầu tiên (foo = hello world, Pew Pew) được trả về 200 OK. Sau đó, cuộc gọi api thứ hai sẽ trả lại 200 OK nhưng với dữ liệu từ cuộc gọi trước đó.
Ngoài ra, tôi không sử dụng bất kỳ máy chủ proxy nào. Nếu tôi nhận xét thuộc tính OutputCache, tất cả đều tốt.
Tôi cũng đã thử như sau (bằng tay danh sách mỗi lần tôi cần phải nhớ cache) .....
[OutputCache(Duration = 60, VaryByParam = "foo,key,bar,pewpew")]
Không may mắn :(
Chú ý làm thế nào tôi cần phải chắc chắn rằng tôi bao gồm tham số API 'Khóa' như một phần của khóa duy nhất của bộ nhớ cache. Tôi không muốn mọi người tìm kiếm cùng một thứ, nhưng nếu người thứ hai không có khóa chính xác, họ sẽ không nhận được kết quả được lưu trong bộ nhớ cache , nhưng một thông báo lỗi (kỹ thuật, đó là 401 Không được ủy quyền, nhưng dù sao) ...
Thou ghts?
+1 trực tiếp tập trung vào câu hỏi tại bàn tay không sao. mặc dù tôi không nghĩ đó là vấn đề duy nhất anh ta có ở đây. cũng trả lời bình luận của bạn dưới đây. – dove