Di versi asp.net sebelumnya, kami dapat menggunakan
@Request.Url.AbsoluteUri
Tapi sepertinya sudah berubah. Bagaimana kita bisa melakukannya di asp.net core 1.0?
asp.net-core
asp.net-core-mvc
asp.net-core-1.0
oneNiceFriend
sumber
sumber
Jawaban:
Anda harus mendapatkan host dan jalur secara terpisah.
sumber
@
antara dua senar? bisakah kamu menjelaskannya?@HttpContext
sebagai gantinya@Context
. Untuk tampilan parsial@Context
bekerja. Apakah saya lupa menggunakan?Url.Action("Action", null, null, Request.Url.Scheme);
stackoverflow.com/questions/434604/…Anda membutuhkan skema, host, jalur, dan queryString
atau menggunakan fitur C # 6 baru "Interpolasi string"
sumber
Anda dapat menggunakan metode ekstensi
Request
:sumber
@using Microsoft.AspNetCore.Http.Extensions
kemudian@Context.Request.GetDisplayUrl()
Suitable only for display. This format should not be used in HTTP headers or other HTTP operations.
Berdasarkan ini, saya pikir solusi @ tmg adalah yang terbaik (mungkin dibungkus dengan metode ekstensi Anda sendiri).Ini tampaknya selalu mungkin dalam .net core 1.0 dengan
Microsoft.AspNetCore.Http.Extensions
, yang menambahkan ekstensiHttpRequest
untuk mendapatkan URL lengkap; GetEncodedUrl .mis. dari pandangan pisau cukur:
Sejak 2.0, juga memiliki jalur relatif dan kueri GetEncodedPathAndQuery .
sumber
Gunakan properti AbsoluteUri dari Uri, dengan inti .Net Anda harus membangun Uri dari permintaan seperti ini,
misal, jika url permintaan adalah ' http://www.contoso.com/catalog/shownew.htm?date=today ' ini akan mengembalikan url yang sama.
sumber
Anda dapat mempertimbangkan untuk menggunakan metode ekstensi ini (dari
Microsoft.AspNetCore.Http.Extensions
namespace:Untuk beberapa proyek saya, saya lebih memilih solusi yang lebih fleksibel. Ada dua metode ekstensi.
1) Metode pertama membuat
Uri
objek dari data permintaan yang masuk (dengan beberapa varian melalui parameter opsional). 2) Metode kedua menerimaUri
objek dan mengembalikanstring
dalam format berikut (tanpa garis miring): Scheme_Host_PortPemakaian:
sumber
sumber
httpContext
? Itu tidak akan berhasil denganMicrosoft.AspNetCore.Http.HttpContext.Request
Jika Anda juga ingin mendapatkan nomor port dari permintaan tersebut, Anda harus mengaksesnya melalui
Request.Host
properti untuk AspNet Core.The
Request.Host
properti tidak hanya string tetapi, sebaliknya, sebuah benda yang memegang kedua host domain dan nomor port. Jika nomor port khusus ditulis dalam URL (yaitu"https://example.com:8080/path/to/resource"
), kemudian memanggilRequest.Host
akan memberikan domain host dan nomor port seperti:"example.com:8080"
.Jika Anda hanya menginginkan nilai untuk domain host atau hanya menginginkan nilai untuk nomor port, maka Anda dapat mengakses properti tersebut satu per satu (yaitu
Request.Host.Host
atauRequest.Host.Port
).sumber
Jawaban yang diterima membantu saya, seperti halnya komentar untuk itu dari @padigan tetapi jika Anda ingin menyertakan parameter kueri-string seperti yang terjadi pada saya, coba ini:
Dan Anda perlu menambahkan
@using Microsoft.AspNetCore.Http.Extensions
tampilan agar metode GetEncodedPathAndQuery () tersedia.sumber
Ada cara yang bersih untuk mendapatkan URL saat ini dari halaman Razor atau kelas PageModel. Itu adalah:
Harap dicatat bahwa yang saya maksud, "ASP.NET Core Razor Pages ", bukan MVC.
Saya menggunakan metode ini ketika saya ingin mencetak meta tag URL kanonik di halaman pisau cukur ASP.NET Core. Tapi ada tangkapan. Ini akan memberi Anda URL yang seharusnya menjadi URL yang tepat untuk halaman itu. Biar saya jelaskan.
Misalnya, Anda telah menentukan rute bernama "id" untuk halaman Anda dan oleh karena itu, URL Anda akan terlihat seperti ini
Url.PageLink () akan memberi Anda URL persis seperti yang ditunjukkan di atas.
Sekarang, jika pengguna menambahkan sesuatu yang ekstra pada URL itu, katakanlah,
Kemudian, Anda tidak akan mendapatkan "sesuatu yang lain" dari metode ini. Dan itulah mengapa sangat bagus untuk mencetak meta tag URL kanonik di halaman HTML.
sumber