Bagaimana saya bisa dengan cepat menentukan apa URL root untuk aplikasi ASP.NET MVC saya? Yaitu, jika IIS diatur untuk melayani aplikasi saya di http://example.com/foo/bar , maka saya ingin bisa mendapatkan URL itu dengan cara yang andal yang tidak melibatkan mendapatkan URL saat ini dari meminta dan memotongnya dalam beberapa cara rapuh yang rusak jika saya mengubah rute tindakan saya.
Alasan saya memerlukan URL dasar adalah bahwa aplikasi web ini memanggil yang lain yang membutuhkan root untuk aplikasi web pemanggil untuk keperluan panggilan balik.
.net
asp.net
asp.net-mvc
iis
Benjamin Pollack
sumber
sumber
urlHelper.Content("~")
? Bagaimana cara membuat defineurlHelper
? Terima kasih!var request = HttpContext.Current.Request; urlBase = string.Format("{0}://{1}{2}", request.Url.Scheme, request.Url.Authority, (new System.Web.Mvc.UrlHelper(request.RequestContext)).Content("~"));
ControllerContext.RequestContext.HttpContext.Request
@Url.Content("~")
memutuskan untuk"/"
, yang bukan url dasar.Jadi tidak ada yang tercantum di sini yang berfungsi untuk saya, tetapi menggunakan beberapa jawaban, saya dapat sesuatu yang berhasil:
Pembaruan untuk ASP.NET Core / MVC 6:
ASP.NET Core
membuat proses ini sedikit lebih menyakitkan, terutama jika Anda tenggelam dalam kode Anda. Anda memiliki 2 opsi untuk mendapatkannya diHttpContext
1) Serahkan dari
controller
:lalu di
model
:2) Mungkin cara yang lebih bersih adalah dengan menyuntikkannya ke kelas Anda, yang dimulai dengan mendaftarkan jenis di Anda
Startup:
kemudian disuntikkan untuk Anda seperti ini:
dalam kedua kasus, berikut adalah pembaruan untuk
.NET Core
GetBaseUrl()
:sumber
Helpers
di dasar aplikasi saya, saya memilikistatic
kelas yang disebutStatics
dan saya meletakkan fungsi seperti di atas sana ... pastikan Anda mengubah di atas daripublic string GetBaseUrl()
kepublic static string GetBaseUrl()
Statics
, sebaliknya saya memecahnya menjadi penggunaan yang lebih spesifik, jadi dalam hal ini akan masuk keUrlHelper
kelas sayaDalam kode:
Sintaks Razor MVC3:
sumber
/
bukan nama sebenarnya.Url
pembantu tersedia untuk Anda langsung? Mungkin hanya diController
. Tentu saja tidak diViewModel
atau diclass
mana pun Anda mungkin memerlukan ini ..Mungkin ekstensi atau modifikasi dari jawaban yang diposting di sini, tetapi saya hanya menggunakan baris berikut dan berfungsi:
Ketika jalur saya adalah:
http://host/iis_foldername/controller/action
maka saya menerima:
http://host/iis_foldername/
sumber
Cuplikan berikut ini berfungsi dengan baik untuk saya di MVC4, dan tidak perlu
HttpContext
tersedia:sumber
jQuery.load()
untuk membuat URL untuk pengontrol dan tindakan yang ingin saya panggil:$('#myplaceholder').load('@(Html.Raw(HttpRuntime.AppDomainAppVirtualPath))/MyController/MyAction', ...);
Trik dengan mengandalkan IIS adalah bahwa ikatan IIS dapat berbeda dari URL publik Anda (WCF saya melihat Anda), terutama dengan mesin produksi multi-homed. Saya cenderung vektor ke arah menggunakan konfigurasi untuk secara eksplisit mendefinisikan url "base" untuk keperluan eksternal karena itu cenderung sedikit lebih berhasil daripada mengekstraknya dari objek Request.
sumber
Untuk URL basis absolut, gunakan ini. Bekerja dengan HTTP dan HTTPS.
sumber
Ini adalah konversi properti asp.net ke MVC . Ini hampir semua bernyanyi semua menari mendapatkan metode url root.
Nyatakan kelas pembantu:
Pemakaian:
Untuk digunakan dari pengontrol:
Untuk digunakan dalam tampilan:
sumber
Di MVC _Layout.cshtml:
Itulah yang kami gunakan!
sumber
<base>
. Anda juga dapat menghilangkan Skema sehingga akan berfungsi dengan http atau https. Itu berarti Anda dapat memulai url dengan//
.Ini berfungsi baik untuk saya (juga dengan penyeimbang beban):
Terutama jika Anda menggunakan nomor port non-standar, menggunakan Request.Url. Otoritas tampak seperti petunjuk yang baik pada awalnya, tetapi gagal dalam lingkungan LB.
sumber
Anda bisa memiliki metode statis yang terlihat di HttpContext.Current dan memutuskan URL mana yang akan digunakan (pengembangan atau server langsung) tergantung pada ID host. HttpContext bahkan mungkin menawarkan beberapa cara yang lebih mudah untuk melakukannya, tetapi ini adalah opsi pertama yang saya temukan dan berfungsi dengan baik.
sumber
Anda dapat menggunakan skrip berikut dalam tampilan:
sumber
Untuk ASP.NET MVC 4 agak berbeda:
sumber
Ini bekerja di ASP .NET MVC 4 Dalam setiap tindakan pengontrol Anda dapat menulis: 1stline mendapatkan seluruh url + String Kueri. Baris ke-2 menghapus lintasan & kueri lokal, simbol '/' terakhir. Baris ketiga tambahkan simbol '/' di posisi terakhir.
sumber
dalam html sederhana dan ASP.NET atau ASP.NET MVC jika Anda menggunakan tag:
sumber
Untuk url dengan alias aplikasi seperti http://example.com/appAlias/ ... Anda dapat mencoba ini:
sumber
Di halaman web itu sendiri:
Dalam javascript:
Ini berfungsi untuk proyek MVC saya, semoga membantu
sumber
Saya menempatkan ini di kepala _Layout.cshtml saya
sumber
Mungkin itu solusi yang lebih baik.
menggunakan
sumber
Untuk MVC 4:
sumber
Berikut ini berhasil bagi saya
sumber
--output http: // localhost: 49626 / TEST /
sumber
Ini adalah solusi saya (menggunakan .net core 3.1, dalam pengendali api):
sumber
Cukup dalam satu baris, dapatkan BaseUrl
sumber
Anda juga dapat menggunakan ini. Untuk halaman pisau cukur, lebih baik menggunakannya daripada yang lain.
https://ml-software.ch/posts/getting-the-base-url-for-an-asp-net-core-mvc-web-application-in-your-static-javascript-files Anda
sumber
tambahkan fungsi ini di kelas statis dalam proyek seperti kelas utilitas:
konten utility.cs :
gunakan kode ini di mana saja dan nikmati:
sumber