The HttpRequest
kelas di Asp.Net 5 (vNext) mengandung (antara lain) rincian diurai tentang URL untuk permintaan, seperti Scheme
, Host
, Path
dll
Saya belum melihat di mana pun yang memperlihatkan URL permintaan asli - hanya nilai yang diuraikan ini. (Di versi sebelumnya ada Request.Uri
)
Bisakah saya mendapatkan kembali URL mentah tanpa harus menyatukannya dari komponen yang tersedia di HttpRequest?
request
uri
asp.net-core
Jon Egerton
sumber
sumber
Jawaban:
Sepertinya Anda tidak dapat mengaksesnya secara langsung, tetapi Anda dapat membuatnya menggunakan kerangka kerja:
Anda juga dapat menggunakan metode di atas sebagai metode ekstensi.
Ini mengembalikan a
string
daripada aUri
, tetapi itu harus memenuhi tujuan! (Ini juga tampaknya melayani peran ituUriBuilder
juga.)Terima kasih kepada @mswietlicki karena menunjukkan bahwa itu baru saja difaktorisasi, bukan hilang! Dan juga ke @CF untuk menunjukkan perubahan namespace di jawaban saya!
sumber
GetEncodedUri
atauGetDisplayUri
, tergantung pada kasus penggunaan Anda.Tambahkan Paket Nuget / Menggunakan:
(Di ASP.NET Core RC1 ini ada di Microsoft.AspNet.Http.Extensions)
maka Anda bisa mendapatkan url permintaan http lengkap dengan menjalankan:
atau
tergantung tujuannya.
sumber
using
direktif di file Anda seperti yang dijelaskan dalam jawaban, karena ini bukan metode "normal", melainkan metode ekstensi.Jika Anda benar - benar menginginkan URL mentah yang sebenarnya , Anda dapat menggunakan metode ekstensi berikut:
public static class HttpRequestExtensions { public static Uri GetRawUrl(this HttpRequest request) { var httpContext = request.HttpContext; var requestFeature = httpContext.Features.Get<IHttpRequestFeature>(); return new Uri(requestFeature.RawTarget); } }
Metode ini menggunakan
RawTarget
permintaan, yang tidak muncul diHttpRequest
objek itu sendiri. Properti ini ditambahkan pada rilis 1.0.0 ASP.NET Core. Pastikan Anda menjalankannya atau versi yang lebih baru.CATATAN! Properti ini memperlihatkan URL mentah , sehingga belum didekodekan, seperti yang dicatat oleh dokumentasi:
sumber
RawTarget
tidak ditentukan padaIHttpRequestFeature
). Bisakah Anda memikirkan sebuah alternatif?RawTarget
telah ditambahkan pada rilis 1.0, pada bulan Mei . Apakah Anda yakin Anda menggunakan versi terbaru?Dalam pisau cukur .NET Core:
Anda juga dapat menggunakan sebagai pengganti baris kedua:
sumber
Solusi lain tidak sesuai dengan kebutuhan saya karena saya ingin langsung sebuah
URI
objek dan saya pikir lebih baik untuk menghindari penggabungan string (juga) dalam hal ini jadi saya membuat metode ekstensi ini daripada menggunakan aUriBuilder
dan bekerja juga dengan url sepertihttp://localhost:2050
:sumber
(80)
seharusnya(-1)
. Jika Anda memiliki skema https dengan port dihilangkan di header "Host", ini akan menghasilkan Uri yang salah (misalnyahttps://myweb:80/
, dengan(-1)
itu akan terjadihttps://myweb
).Metode ekstensi berikut mereproduksi logika dari pra-beta5
UriHelper
:sumber
Ekstensi ini berfungsi untuk saya:
menggunakan Microsoft.AspNetCore.Http;
sumber
Di ASP.NET 5 beta5:
sumber