如何在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;

如果有人能指引我正确的方向,我将不胜感激。

如何在ASP.NET Core MVC中获取Url引用程序

您就快到了。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

RequestControllerBase(因此也是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();

几乎与没有魔术字符串的已接受答案相同