Estoy intentando migrar un formulario web ASP.NET MVC a ASP.NET Core MVC. Actualmente, tengo problemas con la Request.UrlReferrer
clase.
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.ServerVariables
tampoco 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
StringValues
clase es solo un tipo que ASP.NET usa para representar de manera eficiente cadenas en el marco. Especialmente en elHttpContext
objeto. Simplemente puede llamarloToString()
para convertirlo en una cadena:string referer = Request.Headers["Referer"].ToString();
fuente
A partir del uso de asp.net core 2
GetTypedHeaders
fuente
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
Nuget
paquete (Microsoft.AspNetCore.Server.Kestrel
) ... también se ha probado que funcioneIISExpress
?SSL
? etc.Esto funciona (probado en .NET Core 3.1):
Request
es una propiedad de ambosControllerBase
(y, porController
lo 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