c# - tutorial - ¿Qué es el ASP.NET Core MVC equivalente a Request.RequestURI?
asp.net mvc (3)
Aquí hay un código de trabajo. Esto se basa en la respuesta de @Thomas Levesque que no funcionó bien cuando la solicitud proviene de un puerto personalizado.
public static class HttpRequestExtensions
{
public static Uri ToUri(this HttpRequest request)
{
var hostComponents = request.Host.ToUriComponent().Split('':'');
var builder = new UriBuilder
{
Scheme = request.Scheme,
Host = hostComponents[0],
Path = request.Path,
Query = request.QueryString.ToUriComponent()
};
if (hostComponents.Length == 2)
{
builder.Port = Convert.ToInt32(hostComponents[1]);
}
return builder.Uri;
}
}
Encontré una publicación de blog que muestra cómo "calmar" cosas familiares como HttpResponseMessage de nuevo en ASP.NET Core MVC, pero quiero saber cuál es la nueva forma nativa de hacer lo mismo que el siguiente código en un método de publicación REST en una Controlador:
// POST audit/values
[HttpPost]
public System.Net.Http.HttpResponseMessage Post([FromBody]string value)
{
var NewEntity = _repository.InsertFromString(value);
var msg = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Created);
msg.Headers.Location = new Uri(Request.RequestUri + NewEntity.ID.ToString());
return msg;
}
En un proyecto de ASP.NET Core MVC, parece que no puedo obtener Request.RequestUri.
Intenté inspeccionar la solicitud y pude realizar una función como esta:
private string UriStr(HttpRequest Request)
{
return Request.Scheme + "://" + Request.Host + Request.Path; // Request.Path has leading /
}
Así que podría escribir UriStr(Request)
lugar. Pero no estoy seguro de que sea correcto. Siento que estoy hackeando mi camino y no uso esto correctamente.
Una pregunta relacionada para las versiones anteriores de Core.NET MVC no Core pregunta cómo obtener la URL base del sitio.
Personalmente, yo uso:
new Uri(request.GetDisplayUrl())
GetDisplayUrl es un método de extensión del siguiente espacio de nombres: Microsoft.AspNetCore.Http.Extensions
Una forma más limpia sería usar un UriBuilder
:
private static Uri GetUri(HttpRequest request)
{
var builder = new UriBuilder();
builder.Scheme = request.Scheme;
builder.Host = request.Host.Value;
builder.Path = request.Path;
builder.Query = request.QueryString.ToUriComponent();
return builder.Uri;
}
(no probado, el código puede requerir algunos ajustes)