You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6中NoDirectAccessAttribute是否变更?Url属性报错如何解决

问题根源

你使用的代码是传统.NET Framework平台下ASP.NET MVC的实现,无法直接在ASP.NET Core(.NET 6属于该技术栈)中运行。两个版本的Web框架对HttpRequest请求对象的API设计做了破坏性调整,不存在Url、UrlReferrer这两个属性,因此会触发编译错误,IDE也无法给出using补全类的修复建议——这不是NoDirectActionAttribute的逻辑有版本变更,是底层请求对象的属性完全改名、换了用法。

新旧API对应关系
  • 旧版Request.Url:用来获取当前请求的完整URL对象,Core版本中可直接通过Request.Host属性拿到当前请求的主机信息,无需解析完整URL
  • 旧版Request.UrlReferrer:用来获取请求来源地址,Core版本中来源地址存储在Request.Headers["Referer"]请求头中,需要自行转换为Uri对象解析
.NET 6 可用的完整实现

首先引入必要的命名空间:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Routing;

修正后的特性代码:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
internal class NoDirectActionAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var request = filterContext.HttpContext.Request;
        // 解析来源请求头
        var refererHeader = request.Headers["Referer"].ToString();
        if (!Uri.TryCreate(refererHeader, UriKind.Absolute, out var referrerUri))
        {
            // 无有效来源,跳转至首页
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new 
            { 
                controller = "Home", 
                action = "Index", 
                area = string.Empty 
            }));
            return;
        }
        // 比对当前请求与来源请求的主机
        if (!string.Equals(referrerUri.Host, request.Host.Host, StringComparison.OrdinalIgnoreCase))
        {
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new 
            { 
                controller = "Home", 
                action = "Index", 
                area = string.Empty 
            }));
        }
    }
}
额外说明
  • Referer请求头可被客户端篡改、禁用,该实现仅能拦截普通用户直接在地址栏输入URL访问的场景,不能作为严格的权限校验方案。受限页面的访问控制请优先使用ASP.NET Core内置的认证、授权中间件实现。
  • 如果你的项目使用Razor Pages或Minimal API,跳转路由的参数需要对应调整为项目实际的路由配置。

内容的提问来源于stack exchange,提问作者user19111040

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 09:57:27