Как я могу получить 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;