Я пытаюсь перенести веб-форму 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;
Я был бы очень признателен, если бы кто-нибудь направил меня в правильном направлении.
c#
asp.net-core
asp.net-core-mvc
Кемаль Тезер Дилсиз
источник
источник
Ответы:
Ты почти там.
StringValues
Класс только тип ASP.NET использует для эффективного представления строк в рамках. Особенно вHttpContext
объекте. Вы можете просто вызватьToString()
его, чтобы преобразовать его в строку:string referer = Request.Headers["Referer"].ToString();
источник
Начиная с asp.net core 2 используйте
GetTypedHeaders
источник
Вот как я получил реферер URL: -
@{ string referer = Context.Request.Headers["Referer"].ToString(); Uri baseUri = new Uri(referer);} <form asp-action="Login" asp-route-returnUrl="@baseUri.AbsolutePath">
источник
using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; var referer = ((FrameRequestHeaders)Request.Headers).HeaderReferer.FirstOrDefault();
почти такой же, как принятый ответ без волшебной строки
источник
Nuget
package (Microsoft.AspNetCore.Server.Kestrel
) ... также было ли это протестировано для работыIISExpress
?SSL
? так далее.?Это работает (проверено в .NET Core 3.1):
Request
является свойством какControllerBase
(и, следовательно,Controller
тоже), так иHttpContext
, поэтому вы можете получить его от любого.Например, чтобы перенаправить на ссылающуюся страницу из действия контроллера, просто сделайте следующее:
public IActionResult SomeAction() { return Redirect(Request.GetTypedHeaders().Referer.ToString()); }
источник