如何在ASP.NET Core MVC中获取Url Referrer?

时间:2016-08-04 16:08:22

标签: c# asp.net-core asp.net-core-mvc

我正在尝试将ASP.NET MVC webform迁移到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;

如果有人能指引我朝着正确的方向前进,我真的很感激。

5 个答案:

答案 0 :(得分:100)

你快到了。 StringValues类只是ASP.NET用于在框架中有效表示字符串的类型。特别是在HttpContext对象中。您只需在其上调用ToString()即可将其转换为字符串:

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

答案 1 :(得分:5)

using Microsoft.AspNetCore.Server.Kestrel.Internal.Http;

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

几乎与不带魔术字符串的已接受答案

答案 2 :(得分:3)

这有效(在.NET Core 3.1中测试):

Request.GetTypedHeaders().Referer

RequestControllerBase(因此也是Controller)和HttpContext的属性,因此您可以从任何一个中获取它。

例如,要从控制器操作重定向到引荐页,只需执行以下操作:

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

答案 3 :(得分:2)

这是我获取网址引荐来源网址的方式:-

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


<form asp-action="Login" asp-route-returnUrl="@baseUri.AbsolutePath">

答案 4 :(得分:0)

从asp.net核心2开始,使用GetTypedHeaders

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