Asp.Net 5(vNext)のHttpRequest
クラスには、(特に)リクエストのURLに関する解析された詳細(Scheme
、Host
、Path
など.
ただし、元のリクエストURLを公開する場所はまだ見つけていません。これらの解析された値のみです。 (以前のバージョンでは、Request.Uri
)
HttpRequestで使用可能なコンポーネントからつなぎ合わせる必要なく、生のURLを取得できますか?
直接アクセスできないように見えますが、フレームワークを使用してビルドできます。
Microsoft.AspNetCore.Http.Extensions.UriHelper.GetFullUrl(Request)
上記を拡張メソッドとして使用することもできます。
これはstring
ではなくUri
を返しますが、目的を果たすはずです! (これはUriBuilder
の役割も果たすようです。)
@mswietlickiが欠落しているのではなく、リファクタリングされていることを指摘してくれてありがとう!また、私の答えで名前空間の変更を指摘するために@ C-Fに!
Nugetパッケージを追加/使用:
using Microsoft.AspNetCore.Http.Extensions;
(ASP.NET Core RC1では、これはMicrosoft.AspNet.Http.Extensionsにありました)
次に、次を実行して完全なhttpリクエストURLを取得できます。
var url = httpContext.Request.GetEncodedUrl();
または
var url = httpContext.Request.GetDisplayUrl();
目的に応じて。
really実際の生のURLが必要な場合は、次の拡張方法:
public static class HttpRequestExtensions
{
public static Uri GetRawUrl(this HttpRequest request)
{
var httpContext = request.HttpContext;
var requestFeature = httpContext.Features.Get<IHttpRequestFeature>();
return new Uri(requestFeature.RawTarget);
}
}
このメソッドは、リクエストのRawTarget
を利用しますが、HttpRequest
オブジェクト自体には表示されません。このプロパティは、ASP.NET Coreの1.0.0リリースで追加されました。それ以降のバージョンを実行していることを確認してください。
注!このプロパティはrawURLを公開するため、ドキュメントに記載されているようにデコードされていません。
このプロパティーは、ルーティングまたは許可の決定のために内部的に使用されることはありません。 UrlDecodedではないため、使用には注意が必要です。
他のソリューションは、URI
オブジェクトが直接必要であり、この場合は文字列の連結(も)を避けた方がよいと思うので、私のニーズにうまく適合しなかったので、UriBuilder
およびhttp://localhost:2050
のようなURLでも動作します:
public static Uri GetUri(this HttpRequest request)
{
var uriBuilder = new UriBuilder
{
Scheme = request.Scheme,
Host = request.Host.Host,
Port = request.Host.Port.GetValueOrDefault(80),
Path = request.Path.ToString(),
Query = request.QueryString.ToString()
};
return uriBuilder.Uri;
}
ASP.NET Core 2.xカミソリページ:
@using Microsoft.AspNetCore.Http.Extensions
@Context.Request.GetEncodedUrl() //Use for any purpose (encoded for safe automation)
別の機能もあります。
@Context.Request.GetDisplayUrl() //Use to display the URL only
次の拡張メソッドは、ベータ5以前のUriHelper
からロジックを再現します。
public static string RawUrl(this HttpRequest request) {
if (string.IsNullOrEmpty(request.Scheme)) {
throw new InvalidOperationException("Missing Scheme");
}
if (!request.Host.HasValue) {
throw new InvalidOperationException("Missing Host");
}
string path = (request.PathBase.HasValue || request.Path.HasValue) ? (request.PathBase + request.Path).ToString() : "/";
return request.Scheme + "://" + request.Host + path + request.QueryString;
}
この拡張機能は私のために機能します:
using Microsoft.AspNetCore.Http;
public static class HttpRequestExtensions
{
public static string GetRawUrl(this HttpRequest request)
{
var httpContext = request.HttpContext;
return $"{httpContext.Request.Scheme}://{httpContext.Request.Host}{httpContext.Request.Path}{httpContext.Request.QueryString}";
}
}
ASP.NET 5 beta5の場合:
Microsoft.AspNet.Http.Extensions.UriHelper.Encode(
request.Scheme, request.Host, request.PathBase, request.Path, request.QueryString);