How to get current url in view in asp.net core 1.0
In previous versions of asp.net, we could use
@Request.Url.AbsoluteUri
But it seems it's changed. How can we do that in asp.net core 1.0?
You have to get the host and path separately.
@Context.Request.Host@Context.Request.Path
You need scheme, host, path and queryString
@string.Format("{0}://{1}{2}{3}", Context.Request.Scheme, Context.Request.Host, Context.Request.Path, Context.Request.QueryString)
or using new C#6 feature "String interpolation"
@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")
You can use the extension method of Request
:
Request.GetDisplayUrl()
Use the AbsoluteUri property of the Uri, with .Net core you have to build the Uri from request like this,
var location = new Uri($"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}");
var url = location.AbsoluteUri;
e.g. if the request url is 'http://www.contoso.com/catalog/shownew.htm?date=today' this will return the same url.
This was apparently always possible in .net core 1.0 with Microsoft.AspNetCore.Http.Extensions
, which adds extension to HttpRequest
to get full URL; GetEncodedUrl.
e.g. from razor view:
@using Microsoft.AspNetCore.Http.Extensions
...
<a href="@Context.Request.GetEncodedUrl()">Link to myself</a>
Since 2.0, also have relative path and query GetEncodedPathAndQuery.
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);
}
If you're looking to also get the port number out of the request you'll need to access it through the Request.Host
property for AspNet Core.
The Request.Host
property is not simply a string but, instead, an object that holds both the host domain and the port number. If the port number is specifically written out in the URL (i.e. "https://example.com:8080/path/to/resource"
), then calling Request.Host
will give you the host domain and the port number like so: "example.com:8080"
.
If you only want the value for the host domain or only want the value for the port number then you can access those properties individually (i.e. Request.Host.Host
or Request.Host.Port
).
You can consider to use this extension method (from Microsoft.AspNetCore.Http.Extensions
namespace:
@Context.Request.GetDisplayUrl()
For some my projects i prefer more flexible solution. There are two extensions methods.
1) First method creates Uri
object from incoming request data (with some variants through optional parameters). 2) Second method receives Uri
object and returns string
in following format (with no trailing slash): 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);
}
Usage:
//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
The accepted answer helped me, as did the comment for it from @padigan but if you want to include the query-string parameters as was the case for me then try this:
@Context.Request.PathBase@Context.Request.GetEncodedPathAndQuery()
And you will need to add @using Microsoft.AspNetCore.Http.Extensions
in the view in order for the GetEncodedPathAndQuery() method to be available.
참고URL : https://stackoverflow.com/questions/38437005/how-to-get-current-url-in-view-in-asp-net-core-1-0
'Program Tip' 카테고리의 다른 글
Android 앱이 포 그라운드에서 실행 중인지 어떻게 알 수 있습니까? (0) | 2020.09.25 |
---|---|
중첩 된 루프에서 벗어나는 방법? (0) | 2020.09.25 |
iOS 11 - Keyboard Height is returning 0 in keyboard notification (0) | 2020.09.25 |
Hibernate-sequence doesn't exist (0) | 2020.09.25 |
How do you make an anchor link non-clickable or disabled? (0) | 2020.09.25 |