Estoy intentando migrar un formulario web ASP.NET MVC a ASP.NET Core MVC. Actualmente, tengo problemas con la Request.UrlReferrerclase.
La línea original es:
[HttpPost]
public async Task<ActionResult> ContactUsFormSubmit(ContactUs request)
{
var siteUrl = Request.UrlReferrer.ToString().ToLower();
....
}
Sin embargo, con ASP.NET Core, UrlReferrer no está disponible. He encontrado lo siguiente:
Request.Headers["Referer"]
que devuelve StringValues en lugar de String. No estoy seguro de si debería intentar usar este o si hay otras soluciones a esta situación. Request.ServerVariablestampoco está disponible o tal vez no tengo el espacio de nombres. Mis espacios de nombres son los siguientes:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
Realmente agradecería que alguien me pueda dirigir en la dirección correcta.
c#
asp.net-core
asp.net-core-mvc
Kemal Tezer Dilsiz
fuente
fuente

Respuestas:
Ya casi estás ahí. La
StringValuesclase es solo un tipo que ASP.NET usa para representar de manera eficiente cadenas en el marco. Especialmente en elHttpContextobjeto. Simplemente puede llamarloToString()para convertirlo en una cadena:string referer = Request.Headers["Referer"].ToString();fuente
A partir del uso de asp.net core 2
GetTypedHeadersfuente
Así es como obtuve URL de referencia: -
@{ string referer = Context.Request.Headers["Referer"].ToString(); Uri baseUri = new Uri(referer);} <form asp-action="Login" asp-route-returnUrl="@baseUri.AbsolutePath">fuente
using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; var referer = ((FrameRequestHeaders)Request.Headers).HeaderReferer.FirstOrDefault();casi lo mismo que la respuesta aceptada sin la cadena mágica
fuente
Nugetpaquete (Microsoft.AspNetCore.Server.Kestrel) ... también se ha probado que funcioneIISExpress?SSL? etc.Esto funciona (probado en .NET Core 3.1):
Requestes una propiedad de ambosControllerBase(y, porControllerlo tanto, también) yHttpContext, por lo que puede obtenerla de cualquiera.Por ejemplo, para redirigir a la página de referencia desde una acción del controlador, simplemente haga esto:
public IActionResult SomeAction() { return Redirect(Request.GetTypedHeaders().Referer.ToString()); }fuente