簡體   English   中英

如何在 ASP.NET 核心 Razor 頁面中獲得完整的 URL?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM