Próbuję przeprowadzić migrację formularza internetowego ASP.NET MVC do ASP.NET Core MVC. Obecnie mam problem z Request.UrlReferrer
klasą.
Oryginalna linia to:
[HttpPost]
public async Task<ActionResult> ContactUsFormSubmit(ContactUs request)
{
var siteUrl = Request.UrlReferrer.ToString().ToLower();
....
}
Jednak w przypadku ASP.NET Core UrlReferrer nie jest dostępny. Znalazłem:
Request.Headers["Referer"]
która zwraca StringValues zamiast String. Nie jestem pewien, czy powinienem spróbować skorzystać z tego, czy są jakieś inne rozwiązania tej sytuacji. Request.ServerVariables
jest również niedostępny lub może nie mam przestrzeni nazw. Moje przestrzenie nazw są następujące:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
Byłbym naprawdę wdzięczny, gdyby ktoś mógł skierować mnie we właściwym kierunku.
c#
asp.net-core
asp.net-core-mvc
Kemal Tezer Dilsiz
źródło
źródło
Odpowiedzi:
Jesteś prawie na miejscu.
StringValues
Klasa jest po prostu rodzajem zastosowania ASP.NET skutecznie reprezentują ciągi w ramach. Szczególnie wHttpContext
obiekcie. Możesz go po prostu wywołaćToString()
, aby przekonwertować go na ciąg:string referer = Request.Headers["Referer"].ToString();
źródło
Od użycia asp.net core 2
GetTypedHeaders
źródło
Oto jak otrzymałem odsyłacz URL: -
@{ string referer = Context.Request.Headers["Referer"].ToString(); Uri baseUri = new Uri(referer);} <form asp-action="Login" asp-route-returnUrl="@baseUri.AbsolutePath">
źródło
using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; var referer = ((FrameRequestHeaders)Request.Headers).HeaderReferer.FirstOrDefault();
prawie taka sama, jak zaakceptowana odpowiedź bez magicznego sznurka
źródło
Nuget
pakietu (Microsoft.AspNetCore.Server.Kestrel
) ... czy to również zostało przetestowane do działaniaIISExpress
?SSL
? itp.?To działa (testowane w .NET Core 3.1):
Request
jest własnością obuControllerBase
(i dlategoController
też)HttpContext
, więc możesz ją uzyskać z obu.Na przykład, aby przekierować do strony odsyłającej z akcji kontrolera, po prostu zrób to:
public IActionResult SomeAction() { return Redirect(Request.GetTypedHeaders().Referer.ToString()); }
źródło