ASP.NET Core: Kiểm thử API web bằng HttpRepl


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

HTTP Read-Eval-Print Loop (REPL) là:

  • Một công cụ dòng lệnh nhẹ, đa nền tảng được hỗ trợ ở mọi nơi .NET Core được hỗ trợ.
  • Được sử dụng để tạo các yêu cầu HTTP để kiểm tra API web ASP.NET Core (và API web không phải ASP.NET Core) và xem kết quả của chúng.
  • Có khả năng kiểm thử các API web được lưu trữ trong mọi môi trường, bao gồm localhost và App Service Azure.

Các động từ HTTP sau được hỗ trợ:

Để làm theo, hãy xem hoặc tải xuống API web ASP.NET Core mẫu (cách tải xuống).

Điều kiện tiên quyết

Cài đặt

Để cài đặt HttpRepl, hãy chạy lệnh sau:

dotnet tool install -g Microsoft.dotnet-httprepl

Công cụ toàn cầu .NET Core được cài đặt từ gói NuGet Microsoft.dotnet-httprepl.

Ghi chú

Theo mặc định, kiến ​​trúc của các tệp nhị phân .NET cần cài đặt đại diện cho kiến ​​trúc hệ điều hành hiện đang chạy. Để chỉ định kiến ​​trúc hệ điều hành khác, hãy xem cài đặt công cụ dotnet, tùy chọn --arch. Để biết thêm thông tin, hãy xem vấn đề GitHub dotnet/AspNetCore.Docs #29262.

Trên macOS, cập nhật đường dẫn:

export PATH="$HOME/.dotnet/tools:$PATH"

Cách sử dụng

Sau khi cài đặt thành công công cụ, hãy chạy lệnh sau để khởi động HttpRepl:

httprepl

Để xem các lệnh HttpRepl có sẵn, hãy chạy một trong các lệnh sau:

httprepl -h
httprepl --help

Đầu ra sau đây được hiển thị:

Usage:
  httprepl [<BASE_ADDRESS>] [options]

Arguments:
  <BASE_ADDRESS> - The initial base address for the REPL.

Options:
  -h|--help - Show help information.

Once the REPL starts, these commands are valid:

Setup Commands:
Use these commands to configure the tool for your API server

connect        Configures the directory structure and base address of the api server
set header     Sets or clears a header for all requests. e.g. `set header content-type application/json`

HTTP Commands:
Use these commands to execute requests against your application.

GET            get - Issues a GET request
POST           post - Issues a POST request
PUT            put - Issues a PUT request
DELETE         delete - Issues a DELETE request
PATCH          patch - Issues a PATCH request
HEAD           head - Issues a HEAD request
OPTIONS        options - Issues a OPTIONS request

Navigation Commands:
The REPL allows you to navigate your URL space and focus on specific APIs that you are working on.

ls             Show all endpoints for the current path
cd             Append the given directory to the currently selected path, or move up a path when using `cd ..`

Shell Commands:
Use these commands to interact with the REPL shell.

clear          Removes all text from the shell
echo [on/off]  Turns request echoing on or off, show the request that was made when using request commands
exit           Exit the shell

REPL Customization Commands:
Use these commands to customize the REPL behavior.

pref [get/set] Allows viewing or changing preferences, e.g. 'pref set editor.command.default 'C:\\Program Files\\Microsoft VS Code\\Code.exe'`
run            Runs the script at the given path. A script is a set of commands that can be typed with one command per line
ui             Displays the Swagger UI page, if available, in the default browser

Use `help <COMMAND>` for more detail on an individual command. e.g. `help get`.
For detailed tool info, see https://aka.ms/http-repl-doc.

HttpRepl cung cấp tính năng hoàn thành lệnh. Việc nhấn phím Tab sẽ lặp qua danh sách các lệnh hoàn thành các ký tự hoặc điểm cuối API mà bạn đã nhập. Các phần sau đây phác thảo các lệnh CLI có sẵn.

Kết nối với API web

Kết nối với API web bằng cách chạy lệnh sau:

httprepl <ROOT URI>

<ROOT URI> là URI cơ sở cho API web. Ví dụ:

httprepl https://localhost:5001

Ngoài ra, hãy chạy lệnh sau bất kỳ lúc nào trong khi HttpRepl đang chạy:

connect <ROOT URI>

Ví dụ:

(Disconnected)> connect https://localhost:5001

Trỏ tới mô tả OpenAPI cho API web theo cách thủ công

Lệnh kết nối ở trên sẽ cố gắng tự động tìm mô tả OpenAPI. Nếu vì lý do nào đó không thể thực hiện được, bạn có thể chỉ định URI của mô tả OpenAPI cho API web bằng cách sử dụng tùy chọn --openapi:

connect <ROOT URI> --openapi <OPENAPI DESCRIPTION ADDRESS>

Ví dụ:

(Disconnected)> connect https://localhost:5001 --openapi /swagger/v1/swagger.json

Bật đầu ra chi tiết để biết chi tiết về tìm kiếm, phân tích cú pháp và xác thực mô tả OpenAPI

Việc chỉ định tùy chọn --verbose bằng lệnh connect sẽ tạo ra nhiều chi tiết hơn khi công cụ tìm kiếm mô tả OpenAPI, phân tích cú pháp và xác thực nó.

connect <ROOT URI> --verbose

Ví dụ:

(Disconnected)> connect https://localhost:5001 --verbose
Checking https://localhost:5001/swagger.json... 404 NotFound
Checking https://localhost:5001/swagger/v1/swagger.json... 404 NotFound
Checking https://localhost:5001/openapi.json... Found
Parsing... Successful (with warnings)
The field 'info' in 'document' object is REQUIRED [#/info]
The field 'paths' in 'document' object is REQUIRED [#/paths]

Điều hướng API web

Xem các điểm cuối có sẵn

Để liệt kê các điểm cuối (controller) khác nhau tại đường dẫn hiện tại của địa chỉ API web, hãy chạy lệnh ls hoặc dir:

https://localhost:5001/> ls

Định dạng đầu ra sau đây được hiển thị:

.        []
Fruits   [get|post]
People   [get|post]

https://localhost:5001/>

Đầu ra trên cho biết có sẵn hai controller: Fruits và People. Cả hai controller đều hỗ trợ các thao tác HTTP GET và POST không tham số.

Điều hướng vào một controller cụ thể sẽ hiển thị chi tiết hơn. Ví dụ: đầu ra của lệnh sau đây cho thấy controller Fruits cũng hỗ trợ các thao tác HTTP GET, PUT và DELETE. Mỗi hoạt động này mong đợi một tham số id trong route:

https://localhost:5001/fruits> ls
.      [get|post]
..     []
{id}   [get|put|delete]

https://localhost:5001/fruits>

Ngoài ra, hãy chạy lệnh ui để mở trang giao diện người dùng Swagger của API web trong trình duyệt. Ví dụ:

https://localhost:5001/> ui

Điều hướng đến một điểm cuối

Để điều hướng đến một điểm cuối khác trên API web, hãy chạy lệnh cd:

https://localhost:5001/> cd people

Đường dẫn theo lệnh cd không phân biệt chữ hoa chữ thường. Định dạng đầu ra sau đây được hiển thị:

/people    [get|post]

https://localhost:5001/people>

Tùy chỉnh HttpRepl

Màu mặc định của HttpRepl có thể được tùy chỉnh. Ngoài ra, một trình soạn thảo văn bản mặc định có thể được xác định. Các tùy chọn HttpRepl được duy trì trong phiên hiện tại và được áp dụng trong các phiên trong tương lai. Sau khi sửa đổi, các tùy chọn được lưu trữ trong tệp sau:

%USERPROFILE%\.httpreplprefs

Tệp .httpreplprefs  được tải khi khởi động và không được theo dõi các thay đổi khi chạy. Các sửa đổi thủ công đối với tệp chỉ có hiệu lực sau khi khởi động lại công cụ.

Xem cài đặt

Để xem các cài đặt khả dụng, hãy chạy lệnh pref get. Ví dụ:

https://localhost:5001/> pref get

Lệnh trên hiển thị các cặp khóa-giá trị (key/value) có sẵn:

colors.json=Green
colors.json.arrayBrace=BoldCyan
colors.json.comma=BoldYellow
colors.json.name=BoldMagenta
colors.json.nameSeparator=BoldWhite
colors.json.objectBrace=Cyan
colors.protocol=BoldGreen
colors.status=BoldYellow

Đặt tùy chọn màu sắc

Tô màu phản hồi hiện chỉ được hỗ trợ cho JSON. Để tùy chỉnh màu công cụ HttpRepl mặc định, hãy xác định vị trí phím tương ứng với màu cần thay đổi. Để biết hướng dẫn về cách tìm các phím, hãy xem phần Xem cài đặt. Ví dụ: thay đổi giá trị khóa colors.json từ Green thành White như sau:

https://localhost:5001/people> pref set colors.json White

Chỉ những màu được phép mới có thể được sử dụng. Các yêu cầu HTTP tiếp theo hiển thị đầu ra với màu mới.

Khi các phím màu cụ thể không được đặt, các phím chung hơn sẽ được xem xét. Để chứng minh hành vi dự phòng này, hãy xem xét ví dụ sau:

  • Nếu colors.json.name không có giá trị, colors.json.string được sử dụng.
  • Nếu colors.json.string không có giá trị, colors.json.literal được sử dụng.
  • Nếu colors.json.literal không có giá trị, colors.json được sử dụng.
  • Nếu colors.json không có giá trị, màu văn bản mặc định của shell lệnh (AllowedColors.None) sẽ được sử dụng.

Đặt kích thước thụt lề

Tùy chỉnh kích thước thụt lề phản hồi hiện chỉ được hỗ trợ cho JSON. Kích thước mặc định là hai khoảng trắng. Ví dụ:

[
  {
    "id": 1,
    "name": "Apple"
  },
  {
    "id": 2,
    "name": "Orange"
  },
  {
    "id": 3,
    "name": "Strawberry"
  }
]

Để thay đổi kích thước mặc định, hãy đặt khóa formatting.json.indentSize. Ví dụ: để luôn sử dụng bốn khoảng trắng:

pref set formatting.json.indentSize 4

Các câu trả lời tiếp theo tôn trọng việc thiết lập bốn khoảng trắng:

[
    {
        "id": 1,
        "name": "Apple"
    },
    {
        "id": 2,
        "name": "Orange"
    },
    {
        "id": 3,
        "name": "Strawberry"
    }
]

Đặt trình soạn thảo văn bản mặc định

Theo mặc định, HttpRepl không có trình soạn thảo văn bản nào được định cấu hình để sử dụng. Để kiểm tra các phương thức API web yêu cầu nội dung yêu cầu HTTP, bạn phải đặt trình soạn thảo văn bản mặc định. Công cụ HttpRepl khởi chạy trình soạn thảo văn bản đã định cấu hình cho mục đích duy nhất là soạn nội dung yêu cầu. Chạy lệnh sau để đặt trình soạn thảo văn bản ưa thích của bạn làm mặc định:

pref set editor.command.default "<EXECUTABLE>"

Trong lệnh trước đó <EXECUTABLE> là đường dẫn đầy đủ đến tệp thực thi của trình soạn thảo văn bản. Ví dụ: chạy lệnh sau để đặt Visual Studio Code làm trình soạn thảo văn bản mặc định:

pref set editor.command.default "C:\Program Files\Microsoft VS Code\Code.exe"

Để khởi chạy trình soạn thảo văn bản mặc định với các đối số CLI cụ thể, hãy đặt khóa editor.command.default.arguments. Ví dụ: giả sử Visual Studio Code là trình soạn thảo văn bản mặc định và bạn luôn muốn HttpRepl mở Visual Studio Code trong một phiên mới với các tiện ích mở rộng bị tắt. Chạy lệnh sau:

pref set editor.command.default.arguments "--disable-extensions --new-window"

Mẹo

Nếu trình chỉnh sửa mặc định của bạn là Visual Studio Code, thông thường bạn sẽ muốn truyền đối số -w hoặc  --wait để buộc Visual Studio Code đợi bạn đóng tệp trước khi quay lại.

Đặt đường dẫn tìm kiếm Mô tả OpenAPI

Theo mặc định, HttpRepl có một tập hợp các đường dẫn tương đối mà nó sử dụng để tìm mô tả OpenAPI khi thực thi lệnh connect mà không có tùy chọn --openapi. Các đường dẫn tương đối này được kết hợp với đường dẫn gốc và đường dẫn cơ sở được chỉ định trong lệnh connect. Các đường dẫn tương đối mặc định là:

  • swagger.json
  • swagger/v1/swagger.json
  • /swagger.json
  • /swagger/v1/swagger.json
  • openapi.json
  • /openapi.json

Để sử dụng một nhóm đường dẫn tìm kiếm khác trong môi trường của bạn, hãy đặt tùy chọn swagger.searchPaths. Giá trị phải là danh sách các đường dẫn tương đối được phân cách bằng dấu sổ đứng |. Ví dụ:

pref set swagger.searchPaths "swagger/v2/swagger.json|swagger/v3/swagger.json"

Thay vì thay thế hoàn toàn danh sách mặc định, danh sách cũng có thể được sửa đổi bằng cách thêm hoặc xóa đường dẫn.

Để thêm một hoặc nhiều đường dẫn tìm kiếm vào danh sách mặc định, hãy đặt tùy chọn swagger.addToSearchPaths. Giá trị phải là danh sách các đường dẫn tương đối được phân cách bằng dấu sổ đứng. Ví dụ:

pref set swagger.addToSearchPaths "openapi/v2/openapi.json|openapi/v3/openapi.json"

Để xóa một hoặc nhiều đường dẫn tìm kiếm khỏi danh sách mặc định, hãy đặt tùy chọn swagger.addToSearchPaths. Giá trị phải là danh sách các đường dẫn tương đối được phân cách bằng dấu sổ đứng. Ví dụ:

pref set swagger.removeFromSearchPaths "swagger.json|/swagger.json"

Kiểm tra các yêu cầu HTTP GET

Tóm tắt

get <PARAMETER> [-F|--no-formatting] [-h|--header] [--response:body] [--response:headers] [-s|--streaming]

Đối số

PARAMETER

Tham số route, nếu có, được mong đợi bởi phương thức hành động của controller liên quan.

Tùy chọn

Các tùy chọn sau có sẵn cho lệnh get:

  • -F|--no-formatting

Cờ có sự hiện diện ngăn chặn định dạng phản hồi HTTP.

  • -h|--header

Đặt tiêu đề yêu cầu HTTP. Hai định dạng giá trị sau được hỗ trợ:

  • {header}={value}
  • {header}:{value}
  • --response:body

Chỉ định một tệp mà nội dung phản hồi HTTP sẽ được ghi vào đó. Ví dụ, --response:body "C:\response.json". Tệp được tạo nếu nó không tồn tại.

  • --response:headers

Chỉ định một tệp mà tiêu đề phản hồi HTTP sẽ được ghi vào đó. Ví dụ, --response:headers "C:\response.txt". Tệp được tạo nếu nó không tồn tại.

  • -s|--streaming

Cờ có sự hiện diện của nó cho phép truyền phát phản hồi HTTP.

Ví dụ

Để đưa ra yêu cầu HTTP GET:

    1. Chạy  get lệnh trên điểm cuối hỗ trợ nó:

https://localhost:5001/people> get

Lệnh trện hiển thị định dạng đầu ra sau:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 21 Jun 2019 03:38:45 GMT
Server: Kestrel
Transfer-Encoding: chunked

[
  {
    "id": 1,
    "name": "Scott Hunter"
  },
  {
    "id": 2,
    "name": "Scott Hanselman"
  },
  {
    "id": 3,
    "name": "Scott Guthrie"
  }
]


https://localhost:5001/people>

    2. Truy xuất một bản ghi cụ thể bằng cách truyền một tham số cho lệnh get:

https://localhost:5001/people> get 2

Lệnh trên hiển thị định dạng đầu ra sau:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 21 Jun 2019 06:17:57 GMT
Server: Kestrel
Transfer-Encoding: chunked

[
  {
    "id": 2,
    "name": "Scott Hanselman"
  }
]


https://localhost:5001/people>

Kiểm tra các yêu cầu HTTP POST

Tóm tắt

post <PARAMETER> [-c|--content] [-f|--file] [-h|--header] [--no-body] [-F|--no-formatting] [--response] [--response:body] [--response:headers] [-s|--streaming]

Đối số

PARAMETER

Tham số route, nếu có, được mong đợi bởi phương thức hành động của controller liên quan.

Tùy chọn

  • -F|--no-formatting

Cờ có sự hiện diện ngăn chặn định dạng phản hồi HTTP.

  • -h|--header

Đặt tiêu đề yêu cầu HTTP. Hai định dạng giá trị sau được hỗ trợ:

  • {header}={value}
  • {header}:{value}
  • --response:body

Chỉ định một tệp mà nội dung phản hồi HTTP sẽ được ghi vào đó. Ví dụ, --response:body "C:\response.json". Tệp được tạo nếu nó không tồn tại.

  • --response:headers

Chỉ định một tệp mà tiêu đề phản hồi HTTP sẽ được ghi vào đó. Ví dụ, --response:headers "C:\response.txt". Tệp được tạo nếu nó không tồn tại.

  • -s|--streaming

Cờ có sự hiện diện của nó cho phép truyền phát phản hồi HTTP.

  • -c|--content

Cung cấp nội dung yêu cầu HTTP nội tuyến. Ví dụ, -c "{\"id\":2,\"name\":\"Cherry\"}".

  • -f|--file

Cung cấp đường dẫn đến tệp chứa nội dung yêu cầu HTTP. Ví dụ, -f "C:\request.json".

  • --no-body

Cho biết rằng không cần nội dung yêu cầu HTTP.

Ví dụ

Để đưa ra một yêu cầu HTTP POST:

    1. Chạy lệnh post trên điểm cuối hỗ trợ nó:

https://localhost:5001/people> post -h Content-Type=application/json

Trong lệnh trên, header Content-Type yêu cầu HTTP được đặt để cho biết loại phương tiện nội dung yêu cầu là JSON. Trình soạn thảo văn bản mặc định sẽ mở tệp .tmp có mẫu JSON đại diện cho nội dung yêu cầu HTTP. Ví dụ:

{
  "id": 0,
  "name": ""
}

Mẹo

Để đặt trình soạn thảo văn bản mặc định, hãy xem phần Đặt trình soạn thảo văn bản mặc định.

    2. Sửa đổi mẫu JSON để đáp ứng các yêu cầu xác thực mô hình:

{
  "id": 0,
  "name": "Scott Addie"
}

    3. Lưu file .tmp và đóng trình soạn thảo văn bản. Đầu ra sau đây xuất hiện trong shell:

HTTP/1.1 201 Created
Content-Type: application/json; charset=utf-8
Date: Thu, 27 Jun 2019 21:24:18 GMT
Location: https://localhost:5001/people/4
Server: Kestrel
Transfer-Encoding: chunked

{
  "id": 4,
  "name": "Scott Addie"
}


https://localhost:5001/people>

Kiểm tra các yêu cầu PUT HTTP

Tóm tắt

put <PARAMETER> [-c|--content] [-f|--file] [-h|--header] [--no-body] [-F|--no-formatting] [--response] [--response:body] [--response:headers] [-s|--streaming]

Đối số

PARAMETER

Tham số route, nếu có, được mong đợi bởi phương thức hành động của controller liên quan.

Tùy chọn

  • -F|--no-formatting

Cờ có sự hiện diện ngăn chặn định dạng phản hồi HTTP.

  • -h|--header

Đặt tiêu đề yêu cầu HTTP. Hai định dạng giá trị sau được hỗ trợ:

  • {header}={value}
  • {header}:{value}
  • --response:body

Chỉ định một tệp mà nội dung phản hồi HTTP sẽ được ghi vào đó. Ví dụ, --response:body "C:\response.json". Tệp được tạo nếu nó không tồn tại.

  • --response:headers

Chỉ định một tệp mà tiêu đề phản hồi HTTP sẽ được ghi vào đó. Ví dụ, --response:headers "C:\response.txt". Tệp được tạo nếu nó không tồn tại.

  • -s|--streaming

Cờ có sự hiện diện của nó cho phép truyền phát phản hồi HTTP.

  • -c|--content

Cung cấp nội dung yêu cầu HTTP nội tuyến. Ví dụ, -c "{\"id\":2,\"name\":\"Cherry\"}".

  • -f|--file

Cung cấp đường dẫn đến tệp chứa nội dung yêu cầu HTTP. Ví dụ, -f "C:\request.json".

  • --no-body

Cho biết rằng không cần nội dung yêu cầu HTTP.

Ví dụ

Để đưa ra yêu cầu HTTP PUT:

    1. Tùy chọn: Chạy lệnh get để xem dữ liệu trước khi sửa đổi:

https://localhost:5001/fruits> get
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Sat, 22 Jun 2019 00:07:32 GMT
Server: Kestrel
Transfer-Encoding: chunked

[
  {
    "id": 1,
    "data": "Apple"
  },
  {
    "id": 2,
    "data": "Orange"
  },
  {
    "id": 3,
    "data": "Strawberry"
  }
]

    2. Chạy lệnh put trên điểm cuối hỗ trợ nó:

https://localhost:5001/fruits> put 2 -h Content-Type=application/json

Trong lệnh trước, header Content-Type yêu cầu HTTP được đặt để cho biết loại phương tiện nội dung yêu cầu là JSON. Trình soạn thảo văn bản mặc định sẽ mở tệp .tmp có mẫu JSON đại diện cho nội dung yêu cầu HTTP. Ví dụ:

{
  "id": 0,
  "name": ""
}

Mẹo

Để đặt trình soạn thảo văn bản mặc định, hãy xem phần Đặt trình soạn thảo văn bản mặc định.

    3. Sửa đổi mẫu JSON để đáp ứng các yêu cầu xác thực mô hình:

{
  "id": 2,
  "name": "Cherry"
}

    4. Lưu tệp .tmp và đóng trình soạn thảo văn bản. Đầu ra sau đây xuất hiện trong shell:

[main 2019-06-28T17:27:01.805Z] update#setState idle
HTTP/1.1 204 No Content
Date: Fri, 28 Jun 2019 17:28:21 GMT
Server: Kestrel

    5. Tùy chọn: Lệnh get để xem các sửa đổi. Ví dụ: nếu bạn nhập "Cherry" trong trình soạn thảo văn bản, thì sẽ trả về kết quả sau:

https://localhost:5001/fruits> get
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Sat, 22 Jun 2019 00:08:20 GMT
Server: Kestrel
Transfer-Encoding: chunked

[
  {
    "id": 1,
    "data": "Apple"
  },
  {
    "id": 2,
    "data": "Cherry"
  },
  {
    "id": 3,
    "data": "Strawberry"
  }
]


https://localhost:5001/fruits>

Kiểm tra các yêu cầu XÓA HTTP

Tóm tắt

delete <PARAMETER> [-F|--no-formatting] [-h|--header] [--response] [--response:body] [--response:headers] [-s|--streaming]

Đối số

PARAMETER

Tham số route, nếu có, được mong đợi bởi phương thức hành động của controller liên quan.

Tùy chọn

  • -F|--no-formatting

Cờ có sự hiện diện ngăn chặn định dạng phản hồi HTTP.

  • -h|--header

Đặt header yêu cầu HTTP. Hai định dạng giá trị sau được hỗ trợ:

  • {header}={value}
  • {header}:{value}
  • --response:body

Chỉ định một tệp mà nội dung phản hồi HTTP sẽ được ghi vào đó. Ví dụ, --response:body "C:\response.json". Tệp được tạo nếu nó không tồn tại.

  • --response:headers

Chỉ định một tệp mà tiêu đề phản hồi HTTP sẽ được ghi vào đó. Ví dụ, --response:headers "C:\response.txt". Tệp được tạo nếu nó không tồn tại.

  • -s|--streaming

Cờ có sự hiện diện của nó cho phép truyền phát phản hồi HTTP.

Ví dụ

Để đưa ra một yêu cầu XÓA HTTP:

    1. Tùy chọn: Chạy lệnh get để xem dữ liệu trước khi sửa đổi:

https://localhost:5001/fruits> get
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Sat, 22 Jun 2019 00:07:32 GMT
Server: Kestrel
Transfer-Encoding: chunked

[
  {
    "id": 1,
    "data": "Apple"
  },
  {
    "id": 2,
    "data": "Orange"
  },
  {
    "id": 3,
    "data": "Strawberry"
  }
]

    2. Chạy lệnh delete trên điểm cuối hỗ trợ nó:

https://localhost:5001/fruits> delete 2

Lệnh trước hiển thị định dạng đầu ra sau:

HTTP/1.1 204 No Content
Date: Fri, 28 Jun 2019 17:36:42 GMT
Server: Kestrel

    3. Tùy chọn: Chạy lệnh get lệnh để xem các sửa đổi. Trong ví dụ này, trả về kết quả sau:

https://localhost:5001/fruits> get
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Sat, 22 Jun 2019 00:16:30 GMT
Server: Kestrel
Transfer-Encoding: chunked

[
  {
    "id": 1,
    "data": "Apple"
  },
  {
    "id": 3,
    "data": "Strawberry"
  }
]


https://localhost:5001/fruits>

Kiểm tra các yêu cầu HTTP PATCH

Tóm tắt

patch <PARAMETER> [-c|--content] [-f|--file] [-h|--header] [--no-body] [-F|--no-formatting] [--response] [--response:body] [--response:headers] [-s|--streaming]

Đối số

PARAMETER

Tham số route, nếu có, được mong đợi bởi phương thức hành động của route liên quan.

Tùy chọn

  • -F|--no-formatting

Cờ có sự hiện diện ngăn chặn định dạng phản hồi HTTP.

  • -h|--header

Đặt tiêu đề yêu cầu HTTP. Hai định dạng giá trị sau được hỗ trợ:

  • {header}={value}
  • {header}:{value}
  • --response:body

Chỉ định một tệp mà nội dung phản hồi HTTP sẽ được ghi vào đó. Ví dụ, --response:body "C:\response.json". Tệp được tạo nếu nó không tồn tại.

  • --response:headers

Chỉ định một tệp mà tiêu đề phản hồi HTTP sẽ được ghi vào đó. Ví dụ, --response:headers "C:\response.txt". Tệp được tạo nếu nó không tồn tại.

  • -s|--streaming

Cờ có sự hiện diện của nó cho phép truyền phát phản hồi HTTP.

  • -c|--content

Cung cấp nội dung yêu cầu HTTP nội tuyến. Ví dụ, -c "{\"id\":2,\"name\":\"Cherry\"}".

  • -f|--file

Cung cấp đường dẫn đến tệp chứa nội dung yêu cầu HTTP. Ví dụ, -f "C:\request.json".

  • --no-body

Cho biết rằng không cần nội dung yêu cầu HTTP.

Kiểm tra các yêu cầu HTTP HEAD

Tóm tắt

head <PARAMETER> [-F|--no-formatting] [-h|--header] [--response] [--response:body] [--response:headers] [-s|--streaming]

Đối số

PARAMETER

Tham số route, nếu có, được mong đợi bởi phương thức hành động của controller liên quan.

Tùy chọn

  • -F|--no-formatting

Cờ có sự hiện diện ngăn chặn định dạng phản hồi HTTP.

  • -h|--header

Đặt tiêu đề yêu cầu HTTP. Hai định dạng giá trị sau được hỗ trợ:

  • {header}={value}
  • {header}:{value}
  • --response:body

Chỉ định một tệp mà nội dung phản hồi HTTP sẽ được ghi vào đó. Ví dụ, --response:body "C:\response.json". Tệp được tạo nếu nó không tồn tại.

  • --response:headers

Chỉ định một tệp mà tiêu đề phản hồi HTTP sẽ được ghi vào đó. Ví dụ, --response:headers "C:\response.txt". Tệp được tạo nếu nó không tồn tại.

  • -s|--streaming

Cờ có sự hiện diện của nó cho phép truyền phát phản hồi HTTP.

Kiểm tra các yêu cầu HTTP OPTIONS

Tóm tắt

options <PARAMETER> [-F|--no-formatting] [-h|--header] [--response] [--response:body] [--response:headers] [-s|--streaming]

Đối số

PARAMETER

Tham số route, nếu có, được mong đợi bởi phương thức hành động của controller liên quan.

Tùy chọn

  • -F|--no-formatting

Cờ có sự hiện diện ngăn chặn định dạng phản hồi HTTP.

  • -h|--header

Đặt tiêu đề yêu cầu HTTP. Hai định dạng giá trị sau được hỗ trợ:

  • {header}={value}
  • {header}:{value}
  • --response:body

Chỉ định một tệp mà nội dung phản hồi HTTP sẽ được ghi vào đó. Ví dụ, --response:body "C:\response.json". Tệp được tạo nếu nó không tồn tại.

  • --response:headers

Chỉ định một tệp mà tiêu đề phản hồi HTTP sẽ được ghi vào đó. Ví dụ, --response:headers "C:\response.txt". Tệp được tạo nếu nó không tồn tại.

  • -s|--streaming

Cờ có sự hiện diện của nó cho phép truyền phát phản hồi HTTP.

Đặt tiêu đề yêu cầu HTTP

Để đặt tiêu đề yêu cầu HTTP, hãy sử dụng một trong các phương pháp sau:

  • Đặt nội tuyến với yêu cầu HTTP. Ví dụ:
https://localhost:5001/people> post -h Content-Type=application/json

Với cách tiếp cận trước đó, mỗi tiêu đề yêu cầu HTTP riêng biệt yêu cầu tùy chọn riêng -h.

  • Đặt trước khi gửi yêu cầu HTTP. Ví dụ:
https://localhost:5001/people> set header Content-Type application/json

Khi đặt tiêu đề trước khi gửi yêu cầu, tiêu đề vẫn được đặt trong suốt thời gian của phiên shell lệnh. Để xóa tiêu đề, hãy cung cấp một giá trị trống. Ví dụ:

https://localhost:5001/people> set header Content-Type

Kiểm tra các điểm cuối được bảo mật

HttpRepl hỗ trợ kiểm tra các điểm cuối được bảo mật theo các cách sau:

  • Thông qua thông tin đăng nhập mặc định của người dùng đã đăng nhập.
  • Thông qua việc sử dụng các tiêu đề yêu cầu HTTP.

Thông tin xác thực mặc định

Hãy xem xét API web mà bạn đang thử nghiệm được lưu trữ trong IIS và được bảo mật bằng xác thực Windows. Bạn muốn thông tin đăng nhập của người dùng đang chạy công cụ chuyển qua các điểm cuối HTTP đang được kiểm tra. Để chuyển thông tin đăng nhập mặc định của người dùng đã đăng nhập:

    1. Đặt httpClient.useDefaultCredentials tùy chọn thành true:

pref set httpClient.useDefaultCredentials true

    2. Thoát và khởi động lại công cụ trước khi gửi một yêu cầu khác tới web API.

Thông tin đăng nhập proxy mặc định

Hãy xem xét một tình huống trong đó API web mà bạn đang thử nghiệm đứng sau một proxy được bảo mật bằng xác thực Windows. Bạn muốn thông tin đăng nhập của người dùng đang chạy công cụ chuyển đến proxy. Để truyền thông tin đăng nhập mặc định của người dùng đã đăng nhập:

    1. Đặt tùy chọn httpClient.proxy.useDefaultCredentials thành true:

pref set httpClient.proxy.useDefaultCredentials true

    2. Thoát và khởi động lại công cụ trước khi gửi một yêu cầu khác tới web API.

Tiêu đề yêu cầu HTTP

Ví dụ về các lược đồ xác thực và ủy quyền được hỗ trợ bao gồm:

  • Xác thực cơ bản
  • Mã thông báo mang JWT
  • Xác thực thông báo

Ví dụ: Bạn có thể gửi mã thông báo mang đến điểm cuối bằng lệnh sau:

set header Authorization "bearer <TOKEN VALUE>"

Để truy cập điểm cuối do Azure lưu trữ hoặc để sử dụng Azure REST API, bạn cần có mã thông báo mang. Sử dụng các bước sau để nhận mã thông báo mang cho đăng ký Azure của bạn thông qua Azure CLI. HttpRepl đặt mã thông báo mang trong tiêu đề yêu cầu HTTP. Một danh sách ứng dụng web App Service Azure được truy xuất.

    1. Đăng nhập vào Azure:

az login

    2. Nhận ID đăng ký của bạn bằng lệnh sau:

az account show --query id

    3. Sao chép ID đăng ký của bạn và chạy lệnh sau:

az account set --subscription "<SUBSCRIPTION ID>"

    4. Nhận mã thông báo mang của bạn bằng lệnh sau:

az account get-access-token --query accessToken

    5. Kết nối với Azure REST API thông qua HttpRepl:

httprepl https://management.azure.com

    6. Đặt header yêu cầu Authorization HTTP:

https://management.azure.com/> set header Authorization "bearer <ACCESS TOKEN>"

    7. Điều hướng đến đăng ký:

https://management.azure.com/> cd subscriptions/<SUBSCRIPTION ID>

    8. Nhận danh sách Ứng dụng web App Service Azure của đăng ký của bạn:

https://management.azure.com/subscriptions/{SUBSCRIPTION ID}> get providers/Microsoft.Web/sites?api-version=2016-08-01

Phản hồi sau đây được hiển thị:

HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Length: 35948
Content-Type: application/json; charset=utf-8
Date: Thu, 19 Sep 2019 23:04:03 GMT
Expires: -1
Pragma: no-cache
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
x-ms-correlation-request-id: <em>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</em>
x-ms-original-request-ids: <em>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</em>
x-ms-ratelimit-remaining-subscription-reads: 11999
x-ms-request-id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
x-ms-routing-request-id: WESTUS:xxxxxxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
{
  "value": [
    <AZURE RESOURCES LIST>
  ]
}

Chuyển đổi hiển thị yêu cầu HTTP

Theo mặc định, việc hiển thị yêu cầu HTTP đang được gửi sẽ bị chặn. Có thể thay đổi cài đặt tương ứng trong suốt thời gian của phiên lệnh shell.

Bật hiển thị yêu cầu

Xem yêu cầu HTTP được gửi bằng cách chạy lệnh echo on. Ví dụ:

https://localhost:5001/people> echo on
Request echoing is on

Các yêu cầu HTTP tiếp theo trong phiên hiện tại sẽ hiển thị header yêu cầu. Ví dụ:

https://localhost:5001/people> post

[main 2019-06-28T18:50:11.930Z] update#setState idle
Request to https://localhost:5001...

POST /people HTTP/1.1
Content-Length: 41
Content-Type: application/json
User-Agent: HTTP-REPL

{
  "id": 0,
  "name": "Scott Addie"
}

Response from https://localhost:5001...

HTTP/1.1 201 Created
Content-Type: application/json; charset=utf-8
Date: Fri, 28 Jun 2019 18:50:21 GMT
Location: https://localhost:5001/people/4
Server: Kestrel
Transfer-Encoding: chunked

{
  "id": 4,
  "name": "Scott Addie"
}


https://localhost:5001/people>

Tắt hiển thị yêu cầu

Ngăn chặn hiển thị yêu cầu HTTP được gửi bằng cách chạy lệnh echo off. Ví dụ:

https://localhost:5001/people> echo off
Request echoing is off

Chạy một tập lệnh

Nếu bạn thường xuyên thực thi cùng một bộ lệnh HttpRepl, hãy cân nhắc việc lưu trữ chúng trong một tệp văn bản. Các lệnh trong tệp có dạng giống như các lệnh được thực hiện thủ công trên dòng lệnh. Các lệnh có thể được thực thi theo kiểu lô (batch) bằng cách sử dụng lệnh run. Ví dụ:

    1. Tạo một tệp văn bản chứa một tập hợp các lệnh được phân cách bằng dòng mới. Để minh họa, hãy xem xét tệp people-script.txt chứa các lệnh sau:

set base https://localhost:5001
ls
cd People
ls
get 1

    2. Thực hiện lệnh run, truyền vào đường dẫn của tệp văn bản. Ví dụ:

https://localhost:5001/> run C:\http-repl-scripts\people-script.txt

Đầu ra sau đây xuất hiện:

https://localhost:5001/> set base https://localhost:5001
Using OpenAPI description at https://localhost:5001/swagger/v1/swagger.json

https://localhost:5001/> ls
.        []
Fruits   [get|post]
People   [get|post]

https://localhost:5001/> cd People
/People    [get|post]

https://localhost:5001/People> ls
.      [get|post]
..     []
{id}   [get|put|delete]

https://localhost:5001/People> get 1
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 12 Jul 2019 19:20:10 GMT
Server: Kestrel
Transfer-Encoding: chunked

{
  "id": 1,
  "name": "Scott Hunter"
}


https://localhost:5001/People>

Xóa đầu ra

Để xóa tất cả đầu ra được ghi vào shell bằng công cụ HttpRepl, hãy chạy lệnh clear hoặc cls. Để minh họa, hãy tưởng tượng shell chứa đầu ra sau:

httprepl https://localhost:5001
(Disconnected)> set base "https://localhost:5001"
Using OpenAPI description at https://localhost:5001/swagger/v1/swagger.json

https://localhost:5001/> ls
.        []
Fruits   [get|post]
People   [get|post]

https://localhost:5001/>

Chạy lệnh sau để xóa đầu ra:

https://localhost:5001/> clear

Sau khi chạy lệnh trên, thì shell chỉ chứa đầu ra sau:

https://localhost:5001/>

Tài nguyên bổ sung

Nguồn: learn.microsoft.com
» Tiếp: Media Formatter trong ASP.NET Web API
« Trước: Hướng dẫn bảo mật cho ASP.NET Core Web API OData
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!