poner - que significa dirección url de linkedin
¿Cómo obtener una URL base en el controlador de la API web? (13)
Al WebApi 2, simplemente llamando a HttpContext.Current.Request.Path;
Sé que puedo usar Url.Link()
para obtener la URL de una ruta específica, pero ¿cómo puedo obtener la URL base de la API web en el controlador de la API web?
Basándome en la respuesta de Athadu, escribo un método de extenesión, luego en la clase de controlador puede obtener la url raíz con this.RootUrl();
public static class ControllerHelper
{
public static string RootUrl(this ApiController controller)
{
return controller.Url.Content("~/");
}
}
De HttpRequestMessage
request.Headers.Host
En el método de acción de la solicitud a la url " http://localhost:85458/api/ctrl/ "
var baseUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority) ;
esto te dará http://localhost:85458
Esto es lo que uso:
Uri baseUri = new Uri(Request.RequestUri.AbsoluteUri.Replace(Request.RequestUri.PathAndQuery, String.Empty));
Luego, cuando lo combino con otra ruta relativa , uso lo siguiente:
string resourceRelative = "~/images/myImage.jpg";
Uri resourceFullPath = new Uri(baseUri, VirtualPathUtility.ToAbsolute(resourceRelative));
Inyecto este servicio en mis controladores.
public class LinkFactory : ILinkFactory
{
private readonly HttpRequestMessage _requestMessage;
private readonly string _virtualPathRoot;
public LinkFactory(HttpRequestMessage requestMessage)
{
_requestMessage = requestMessage;
var configuration = _requestMessage.Properties[HttpPropertyKeys.HttpConfigurationKey] as HttpConfiguration;
_virtualPathRoot = configuration.VirtualPathRoot;
if (!_virtualPathRoot.EndsWith("/"))
{
_virtualPathRoot += "/";
}
}
public Uri ResolveApplicationUri(Uri relativeUri)
{
return new Uri(new Uri(new Uri(_requestMessage.RequestUri.GetLeftPart(UriPartial.Authority)), _virtualPathRoot), relativeUri);
}
}
No estoy seguro de si esto es una adición de Web API 2, pero RequestContext
tiene una propiedad Url
que es un UrlHelper
: HttpRequestContext Properties . Tiene métodos de Link
y Content
. Detalles here
Primero obtienes la URL completa usando HttpContext.Current.Request.Url.ToString();
luego reemplace su URL de método usando Reemplazar ("usuario / inicio de sesión", "").
El código completo será
string host = HttpContext.Current.Request.Url.ToString().Replace("user/login", "")
Puede usar la propiedad VirtualPathRoot
desde HttpRequestContext
( request.GetRequestContext().VirtualPathRoot
)
Utilice el siguiente fragmento de la clase de ayuda Url
Url.Link("DefaultApi", new { controller = "Person", id = person.Id })
El artículo completo está disponible aquí: http://blogs.msdn.com/b/roncain/archive/2012/07/17/using-the-asp-net-web-api-urlhelper.aspx
Esta es la forma oficial que no requiere ningún ayudante o solución alternativa. Si nos fijamos en este enfoque es como ASP.NET MVC
envíe un GET
a una página y el contenido contestado será la URL de respuesta. Base: http://website/api/
Url.Content("~/")
¡trabajó para mi!
new Uri(Request.RequestUri, RequestContext.VirtualPathRoot)