如何在ASP.NET Core MVC中获取Url引用程序
本文关键字:获取 Url 引用 程序 MVC Core ASP NET | 更新日期: 2023-09-27 18:00:09
我正在尝试将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"]
它返回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;
如果有人能指引我正确的方向,我将不胜感激。
您就快到了。StringValues
类只是ASP.NET用来有效表示框架中字符串的一种类型。特别是在HttpContext
对象中。您只需在其上调用ToString()
即可将其转换为字符串:
string referer = Request.Headers["Referer"].ToString();
作为asp.net核心2使用GetTypedHeaders
RequestHeaders header = request.GetTypedHeaders();
Uri uriReferer = header.Referer;
这是有效的(在.NET Core 3.1以后的版本中测试):
Request.GetTypedHeaders().Referer
Request
是ControllerBase
(因此也是Controller
)和HttpContext
的一个属性,因此您可以从任意一个属性中获取它。例如,要从控制器操作重定向到引用页面,只需执行以下操作:
public IActionResult SomeAction()
{
return Redirect(Request.GetTypedHeaders().Referer.ToString());
}
更新:
做了一个扩展方法:
using Microsoft.AspNetCore.Http;
public static class RequestExtensions
{
public static string GetReferrer(this HttpRequest request)
{
return request.GetTypedHeaders().Referer.ToString();
}
}
用法:
public IActionResult SomeAction()
{
return Redirect(Request.GetReferrer());
}
以下是我如何获得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();
几乎与没有魔术字符串的已接受答案相同