Angenommen, meine Website wird im Ordner " mywebsite " von www.example.com gehostet und ich besuche https://www.example.com/mywebsite/home/about .
Wie erhalte ich den Basis-URL-Teil in einem MVC-Controller? Der Teil, den ich suche, ist https://www.example.com/mywebsite
Das hier aufgeführte Beispiel funktioniert nicht, da wir in ASP.NET Core keinen Zugriff auf Request.Url haben
Antworten:
Sie sollten immer noch in der Lage sein, das zusammenzusetzen, was Sie brauchen. Sie haben Zugriff auf das Anforderungsobjekt, wenn Ihr Controller von erbt
Controller
.Wenn Sie VS2017 verwenden, starten Sie eine neue ASPNet Core MVC-App und ersetzen Sie den Homecontroller durch:
public class HomeController : Controller { public IActionResult Index() { return View(); } public IActionResult About() { ViewData["Message"] = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}"; return View(); } public IActionResult Contact() { ViewData["Message"] = "Your contact page."; return View(); } public IActionResult Error() { return View(); } }
Ich habe nur einige Dinge hinzugefügt, die Sie an der "About" -Methode interessieren könnten, aber Sie sollten den Rest der Anforderungsklasse untersuchen, damit Sie wissen, was noch verfügbar ist.
Wie @Tseng hervorhob, haben Sie möglicherweise ein Problem, wenn Sie Kestrel hinter IIS oder Azure App Service ausführen. Wenn Sie jedoch das IISIntegration-Paket oder das AzureAppServices-Paket verwenden (indem Sie das Nuget-Paket installieren und es in Program.cs zu Ihrem WebHostBuilder hinzufügen), tritt ein Problem auf sollte diese Header an Sie weiterleiten. In Azure funktioniert das hervorragend, da ich manchmal Entscheidungen treffen muss, die darauf basieren, welchen Hostnamen sie treffen. Die IIS / Azure-Pakete leiten auch die ursprüngliche Remote-IP-Adresse weiter, die ich protokolliere.
quelle
Wenn Sie dies irgendwo in Ihrer App benötigen, sollten Sie eine Middleware erstellen. Definieren Sie Ihre statische Klasse und Ihre Erweiterungsmethode zum Hinzufügen der Middleware zur Service-Pipeline wie folgt.
public class MyHttpContext { private static IHttpContextAccessor m_httpContextAccessor; public static HttpContext Current => m_httpContextAccessor.HttpContext; public static string AppBaseUrl => $"{Current.Request.Scheme}://{Current.Request.Host}{Current.Request.PathBase}"; internal static void Configure(IHttpContextAccessor contextAccessor) { m_httpContextAccessor = contextAccessor; } } public static class HttpContextExtensions { public static void AddHttpContextAccessor(this IServiceCollection services) { services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); } public static IApplicationBuilder UseHttpContext(this IApplicationBuilder app) { MyHttpContext.Configure(app.ApplicationServices.GetRequiredService<IHttpContextAccessor>()); return app; } }
In diesem Fall ist es möglicherweise etwas überflüssig, den HttpContext verfügbar zu machen, aber ich finde es sehr hilfreich.
Sie würden es dann der Pipeline in Ihrer Configfure-Methode hinzufügen, die sich in Startup.cs befindet
app.UseHttpContext()
Von dort aus ist es einfach, es überall in Ihrem Code zu verwenden.
var appBaseUrl = MyHttpContext.AppBaseUrl;
quelle
Die NPNelson-Antwort funktioniert, wenn mit .Value.ToString ()
var baseUrl = $"{this.Request.Scheme}://{this.Request.Host.Value.ToString()}{this.Request.PathBase.Value.ToString()}";
quelle
ToString
ist hier nicht hilfreich. Es wird automatisch vonstring.Format
bereits gemacht.var baseUrl = Request.GetTypedHeaders().Referer.ToString();
Auf diese Weise können Sie die Basis-URL-Informationen erfassen.
So konnte ich es in der Asp. Net Core 3.1-Version bekommen.
Sie können über den folgenden Link auf die Ressource zugreifen.
Referenz
quelle
using Microsoft.AspNetCore.Http; public void ConfigureServices(IServiceCollection services) { services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); } public AccountController(IHttpContextAccessor httpContextAccessor) { var request = httpContextAccessor.HttpContext.Request; var domain = $"{request.Scheme}://{request.Host}"; //domain => https://varunsoft.in }
quelle
string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));
Weitere Informationen finden Sie hier: Wie kann ich die Basis-URL meiner Webanwendung in ASP.NET MVC abrufen?
quelle