2017-01-10 18 views
22

Tôi đang xây dựng một API RESTful bằng ASP.NET Core MVC và tôi muốn sử dụng tham số chuỗi truy vấn để chỉ định lọc và phân trang trên tài nguyên trả về bộ sưu tập.Cách đọc các giá trị từ chuỗi truy vấn bằng ASP.NET Core?

Trong trường hợp đó, tôi cần phải đọc các giá trị được chuyển trong chuỗi truy vấn để lọc và chọn kết quả để trả về.

Tôi đã phát hiện ra rằng bên trong bộ điều khiển Get truy cập hành động HttpContext.Request.Query trả về một IQueryCollection.

Vấn đề là tôi không biết cách nó được sử dụng để truy xuất các giá trị. Thật ra, tôi nghĩ cách để làm được bằng cách sử dụng, ví dụ

string page = HttpContext.Request.Query["page"] 

Vấn đề là HttpContext.Request.Query["page"] không trả lại một chuỗi, nhưng một StringValues.

Dù sao, cách sử dụng IQueryCollection để thực sự đọc các giá trị chuỗi truy vấn?

+0

Tôi đã viết một bài cho cùng mà bạn có thể tìm thấy ở đây: https://neelbhatt40.wordpress.com/ 2017/07/06/query-string-in-net-core-và-mvc-6/ – Neel

Trả lời

23

Bạn có thể sử dụng phương thức ToString ngày IQueryCollection mà sẽ trả về giá trị mong muốn nếu một tham số duy nhất page được quy định:

string page = HttpContext.Request.Query["page"].ToString(); 

nếu có nhiều giá trị như ?page=1&page=2 sau đó là kết quả của các cuộc gọi ToString sẽ là 1,2

Nhưng như @ mike-g được đề xuất trong câu trả lời của mình, bạn nên sử dụng mô hình ràng buộc và không trực tiếp truy cập đối tượng HttpContext.Request.Query.

+2

ToString là không cần thiết. Trình biên dịch sẽ bỏ nó ngầm, nếu bạn gán giá trị truy vấn cho một chuỗi .. –

5

IQueryCollectionTryGetValue() trên đó trả về giá trị bằng khóa đã cho. Vì vậy, nếu bạn đã có một tham số truy vấn gọi someInt, bạn có thể sử dụng nó như vậy:

var queryString = httpContext.Request.Query; 
StringValues someInt; 
queryString.TryGetValue("someInt", out someInt); 
var daRealInt = int.Parse(someInt); 

ý rằng trừ khi bạn có nhiều tham số cùng tên, loại StringValues không phải là một vấn đề.

+0

Để thêm vào câu trả lời này, nếu bạn gọi StringValues.ToString(), bạn có thể truyền trực tiếp chuỗi đó nếu đó là những gì bạn cần. – eltiare

0

Đây là mẫu mã tôi đã sử dụng (với lõi .net vào xem):

@{ 
    Microsoft.Extensions.Primitives.StringValues queryVal; 

    if (Context.Request.Query.TryGetValue("yourKey", out queryVal) && 
     queryVal.FirstOrDefault() == "yourValue") 
    { 
    } 
} 
Các vấn đề liên quan