以前のバージョンのasp.netでは、
@Request.Url.AbsoluteUri
しかしそれは変わったようです。どのように我々はasp.netコア1.0でそれをすることができますか?
ホストとパスを別々に取得する必要があります。
@[email protected]
Scheme、Host、path、queryStringが必要です。
@string.Format("{0}://{1}{2}{3}", Context.Request.Scheme, Context.Request.Host, Context.Request.Path, Context.Request.QueryString)
または新しいC#6機能「文字列補間」を使用する
@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")
Request
の拡張メソッドを使うことができます。
Request.GetDisplayUrl()
UriのAbsoluteUriプロパティを使用します。Netコアでは、このような要求からUriを構築する必要があります。
var location = new Uri($"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}");
var url = location.AbsoluteUri;
例えばリクエストURLが「 http://www.contoso.com/catalog/shownew.htm?date=today 」の場合、これは同じURLを返します。
public string BuildAbsolute(PathString path, QueryString query = default(QueryString), FragmentString fragment = default(FragmentString))
{
var rq = httpContext.Request;
return Microsoft.AspNetCore.Http.Extensions.UriHelper.BuildAbsolute(rq.Scheme, rq.Host, rq.PathBase, path, query, fragment);
}
これは明らかに、Microsoft.AspNetCore.Http.Extensions
を含む.net core 1.0では常に可能でした。これは、完全なURLを取得するためにHttpRequest
に拡張子を追加します。 GetEncodedUrl 。
例えばかみそりビューから:
@using Microsoft.AspNetCore.Http.Extensions
...
<a href="@Context.Request.GetEncodedUrl()">Link to myself</a>
2.0以降、相対パスとクエリ GetEncodedPathAndQuery もあります。
リクエストからポート番号を取得する場合は、Request.Host
を通じてアクセスする必要があります。 AspNetコアのプロパティ。
Request.Host
プロパティは単なる文字列ではなく、ホストドメインとポート番号の両方を保持するオブジェクトです。ポート番号がURLの具体的に書き出された(つまり"https://example.com:8080/path/to/resource"
)の場合、Request.Host
を呼び出すとホストドメインとポート番号が"example.com:8080"
のように表示されます。
ホストドメインの値だけが必要な場合、またはポート番号の値だけが必要な場合は、これらのプロパティに個別にアクセスできます(つまり、Request.Host.Host
またはRequest.Host.Port
)。
この拡張メソッドを使用することを検討できます(Microsoft.AspNetCore.Http.Extensions
名前空間から)。
@Context.Request.GetDisplayUrl()
いくつかの私のプロジェクトのために私はより柔軟な解決策を好む。拡張方法は2つあります。
1)最初のメソッドは、受信したリクエストデータからUri
オブジェクトを作成します(いくつかのバリエーションはオプションのパラメータを通じて)。 2)2番目のメソッドはUri
オブジェクトを受け取り、次のフォーマットでstring
を返します(末尾にスラッシュは付きません):Scheme_Host_Port
public static Uri GetUri(this HttpRequest request, bool addPath = true, bool addQuery = true)
{
var uriBuilder = new UriBuilder
{
Scheme = request.Scheme,
Host = request.Host.Host,
Port = request.Host.Port.GetValueOrDefault(80),
Path = addPath ? request.Path.ToString() : default(string),
Query = addQuery ? request.QueryString.ToString() : default(string)
};
return uriBuilder.Uri;
}
public static string HostWithNoSlash(this Uri uri)
{
return uri.GetComponents(UriComponents.SchemeAndServer, UriFormat.UriEscaped);
}
使用法:
//before >> https://localhost:44304/information/about?param1=a¶m2=b
Request.GetUri(addQuery: false);
//after >> https://localhost:44304/information/about
//before >> https://localhost:44304/information/about?param1=a¶m2=b
new Uri("https://localhost:44304/information/about?param1=a¶m2=b").GetHostWithNoSlash();
//after >> https://localhost:44304
受け入れられた答えは@padiganからのそれに対するコメントがそうであったように私を助けました、しかしもしあなたが私の場合のようにあなたがquery-stringパラメータを含めたいならそれを試してください:
@[email protected]()
また、GetEncodedPathAndQuery()メソッドを使用できるようにするには、ビューに@using Microsoft.AspNetCore.Http.Extensions
を追加する必要があります。