[c#] ASP.NET Core MVC에서 URL 리퍼러를 얻으려면 어떻게하나요?

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"]

String 대신 StringValues를 반환합니다. 나는 이것을 사용 해야하는지 또는이 상황에 대한 다른 해결책이 있는지 확실하지 않습니다. 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;

누군가 나를 올바른 방향으로 인도 할 수 있다면 정말 감사하겠습니다.



답변

거의 완료되었습니다. 이 StringValues클래스는 ASP.NET이 프레임 워크에서 문자열을 효율적으로 표현하는 데 사용하는 유형일뿐입니다. 특히 HttpContext개체에서. ToString()이를 호출 하여 문자열로 변환 할 수 있습니다 .

string referer = Request.Headers["Referer"].ToString();


답변

asp.net 코어 2 사용 기준 GetTypedHeaders

RequestHeaders header = request.GetTypedHeaders();
Uri uriReferer = header.Referer;


답변

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();

마법의 끈없이 받아 들여진 대답과 거의 같음


답변

이것은 작동합니다 (.NET Core 3.1에서 테스트 됨).

Request.GetTypedHeaders().Referer

RequestBaseController및 의 속성이므로 둘 HttpContext중 하나에서 가져올 수 있습니다.

예를 들어 컨트롤러 작업에서 참조 페이지로 리디렉션하려면 다음과 같이하십시오.

public IActionResult SomeAction()
{
    return Redirect(Request.GetTypedHeaders().Referer.ToString());
}


답변