web-dev-qa-db-ja.com

asp.net core 1.0で現在のURLを表示する方法

以前のバージョンのasp.netでは、

@Request.Url.AbsoluteUri

しかしそれは変わったようです。どのように我々はasp.netコア1.0でそれをすることができますか?

69
oneNiceFriend

ホストとパスを別々に取得する必要があります。

 @[email protected]
86
Clint B

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}")
88
tmg

Requestの拡張メソッドを使うことができます。

Request.GetDisplayUrl()
62
AlexBar

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を返します。

10
Dhanuka777
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);
}
6
Sergey

これは明らかに、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 もあります。

5
mcNux

リクエストからポート番号を取得する場合は、Request.Hostを通じてアクセスする必要があります。 AspNetコアのプロパティ。

Request.Hostプロパティは単なる文字列ではなく、ホストドメインとポート番号の両方を保持するオブジェクトです。ポート番号がURLの具体的に書き出された(つまり"https://example.com:8080/path/to/resource")の場合、Request.Hostを呼び出すとホストドメインとポート番号が"example.com:8080"のように表示されます。

ホストドメインの値だけが必要な場合、またはポート番号の値だけが必要な場合は、これらのプロパティに個別にアクセスできます(つまり、Request.Host.HostまたはRequest.Host.Port)。

5
Hallmanac

この拡張メソッドを使用することを検討できます(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&param2=b
        Request.GetUri(addQuery: false);
        //after >> https://localhost:44304/information/about

        //before >> https://localhost:44304/information/about?param1=a&param2=b
        new Uri("https://localhost:44304/information/about?param1=a&param2=b").GetHostWithNoSlash();
        //after >> https://localhost:44304
1
user3172616

受け入れられた答えは@padiganからのそれに対するコメントがそうであったように私を助けました、しかしもしあなたが私の場合のようにあなたがquery-stringパラメータを含めたいならそれを試してください:

@[email protected]()

また、GetEncodedPathAndQuery()メソッドを使用できるようにするには、ビューに@using Microsoft.AspNetCore.Http.Extensionsを追加する必要があります。

0