web-dev-qa-db-ja.com

ASP.NET Core MVCでURLリファラーを取得するにはどうすればよいですか?

ASP.NET MVC Webフォームを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;

誰かが私を正しい方向に導くことができたら本当に感謝しています。

66

あなたはほとんどそこにいます。 StringValuesクラスは、ASP.NETがフレームワークで文字列を効率的に表現するために使用する単なるタイプです。特にHttpContextオブジェクト内。それに対してToString()を呼び出すだけで、文字列に変換できます。

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

Asp.netコア2の時点でGetTypedHeadersを使用

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

URLリファラーを取得した方法は次のとおりです。

@{
string referer = Context.Request.Headers["Referer"].ToString();
Uri baseUri = new Uri(referer);}


<form asp-action="Login" asp-route-returnUrl="@baseUri.AbsolutePath">
6
Intesar Alam
using Microsoft.AspNetCore.Server.Kestrel.Internal.Http;

var referer = ((FrameRequestHeaders)Request.Headers).HeaderReferer.FirstOrDefault();

マジックストリングなしの受け入れられた答えとほぼ同じ

6
Souhaieb Besbes