[英]How to add .html url suffix to all Razor pages in ASP.NET Core 2?
[英]How to get FULL URL in ASP.NET Core Razor Pages?
我想獲得完整的 URL ,而不僅僅是Path
,不僅僅是Query
,而不是RouteValues
。
整個 URL 以原始形式出現。
如何在 ASP.NET 核心 Razor 頁面中做到這一點?
您可以使用 IUrlHelper 的PageLink
方法獲取絕對的IUrlHelper
到一個頁面。
在頁面處理程序中,可以通過IUrlHelper
屬性訪問Url
:
public async Task<IActionResult> OnPostAsync()
{
string url = Url.PageLink("/PageName", "PageHandler", routeValues);
...
}
如果要生成 URL 到 controller 操作,請使用ActionLink
。
您可以使用UriHelper
擴展方法GetDisplayUrl()
或GetEncodedUrl()
從請求中獲取完整的 URL。
GetDisplayUrl()
以僅適用於顯示的完全未轉義形式(QueryString 除外)返回請求 URL 的組合組件。 此格式不應用於 HTTP 標頭或其他 HTTP 操作。
GetEncodedUrl()
以適用於 HTTP 標頭和其他 HTTP 操作的完全轉義形式返回請求 URL 的組合組件。
用法:
using Microsoft.AspNet.Http.Extensions;
...
string url = HttpContext.Request.GetDisplayUrl();
// or
string url = HttpContext.Request.GetEncodedUrl();
您可以創建一個擴展 class 來使用 IHttpContextAccessor 接口來獲取 HttpContext。 獲得上下文后,您可以從 HttpContext.Request 獲取 HttpRequest 實例並使用其屬性 Scheme、Host、Protocol 等,如下所示:
string scheme = HttpContextAccessor.HttpContext.Request.Scheme;
例如,您可能需要為 class 配置 HttpContextAccessor:
public static class UrlHelperExtensions
{
private static IHttpContextAccessor HttpContextAccessor;
public static void Configure(IHttpContextAccessor httpContextAccessor)
{
HttpContextAccessor = httpContextAccessor;
}
public static string AbsoluteAction(
this IUrlHelper url,
string actionName,
string controllerName,
object routeValues = null)
{
string scheme = HttpContextAccessor.HttpContext.Request.Scheme;
return url.Action(actionName, controllerName, routeValues, scheme);
}
....
}
您可以在 Startup class(Startup.cs 文件)上執行以下操作:
public void Configure(IApplicationBuilder app)
{
...
var httpContextAccessor =
app.ApplicationServices.GetRequiredService<IHttpContextAccessor>();
UrlHelperExtensions.Configure(httpContextAccessor);
...
}
您可能會想出不同的方法在您的擴展 class 中獲取 IHttpContextAccessor,但如果您希望最終將您的方法保留為擴展方法,您需要將 IHttpContextAccessor 注入您的 static ZA2F2ED4F8EBC2CBB4C2A 中。 (否則,您將需要 IHttpContext 作為每次調用的參數)
您可以嘗試使用HttpContext.Request.Scheme + HttpContext.Request.Host
獲取https://localhost:xxxx
,然后使用HttpContext.Request.Path + HttpContext.Request.QueryString
獲取路徑和查詢:
var request = HttpContext.Request;
var _baseURL = $"{request.Scheme}://{request.Host}";
var fullUrl = _baseURL+HttpContext.Request.Path + HttpContext.Request.QueryString;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.