Как я могу получить URL-адрес реферала в ASP.NET Core MVC?
Я пытаюсь перенести веб-страницу ASP.NET MVC в ASP.NET Core MVC. В настоящее время у меня возникают проблемы с классом Request.UrlReferrer
.
Исходная строка:
[HttpPost]
public async Task<ActionResult> ContactUsFormSubmit(ContactUs request)
{
var siteUrl = Request.UrlReferrer.ToString().ToLower();
....
}
Однако, с ASP.NET Core, UrlReferrer недоступен. Я нашел следующее:
Request.Headers["Referer"]
который возвращает StringValues вместо String. Я не уверен, что я должен попытаться использовать это или если есть какие-либо другие решения этой ситуации. Request.ServerVariables
также недоступен или, возможно, у меня нет пространства имен. Мои пространства имен следующие:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
Я бы очень признателен, если кто-то может направить меня в правильном направлении.
Ответы
Ответ 1
Ты почти там. Класс StringValues
- это просто тип, используемый ASP.NET для эффективного представления строк в рамках. Особенно в объекте HttpContext
. Вы можете просто вызвать ToString()
на нем, чтобы преобразовать его в строку:
string referer = Request.Headers["Referer"].ToString();
Ответ 2
using Microsoft.AspNetCore.Server.Kestrel.Internal.Http;
var referer = ((FrameRequestHeaders)Request.Headers).HeaderReferer.FirstOrDefault();
почти так же, как принятый ответ без магической строки
Ответ 3
Вот как я получил URL реферера: -
@{
string referer = Context.Request.Headers["Referer"].ToString();
Uri baseUri = new Uri(referer);}
<form asp-action="Login" asp-route-returnUrl="@baseUri.AbsolutePath">
Ответ 4
Начиная с asp.net core 2 использовать GetTypedHeaders
RequestHeaders header = request.GetTypedHeaders();
Uri uriReferer = header.Referer;