我正在尝试将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;
如果有人能指引我朝着正确的方向前进,我真的很感激。
答案 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
Request
是ControllerBase
(因此也是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;