ASP.NET MVC和ASP.NET Core MVC中获取当前URL/Controller/Action


ASP.NET MVC

一、获取URL(ASP.NET通用):

1) 获取完整url(协议名+域名+虚拟目录名+文件名+参数)

string url=Request.Url.ToString();

2) 获取虚拟目录名+页面名+参数

string url=Request.RawUrl;(或 string url=Request.Url.PathAndQuery;)

3) 获取虚拟目录名+页面名

string url=HttpContext.Current.Request.Url.AbsolutePath;
// 或 
string url= HttpContext.Current.Request.Path;)

4) 获取域名

string url=HttpContext.Current.Request.Url.Host

5) 获取GET参数

string url= HttpContext.Current.Request.Url.Query

6) 获取端口信息

Request.Url.Port

二、获取当前 Controller / Action

RouteData.Route.GetRouteData(this.HttpContext).Values["controller"]
RouteData.Route.GetRouteData(this.HttpContext).Values["action"]
// 或
RouteData.Values["controller"]
RouteData.Values["action"]

在视图中

@ViewContext.RouteData.Route.GetRouteData(this.Context).Values["controller"]
@ViewContext.RouteData.Route.GetRouteData(this.Context).Values["action"]
// 或
@ViewContext.RouteData.Values["controller"]
@ViewContext.RouteData.Values["action"]

很显然上面只能获取当前View的,如果是嵌套的View上面获得的最终的子View的,如果要获取父View的,如下

ControllerContext.ParentActionViewContext.RouteData.Values["controller"]
ControllerContext.ParentActionViewContext.RouteData.Values["action"]

在视图中

@ViewContext.ParentActionViewContext.RouteData.Values["controller"]
@CViewContext.ParentActionViewContext.RouteData.Values["action"]

参考:asp.net MVC中获取当前URL/Controller/Action - EasonJim - 博客园 (cnblogs.com)

 

ASP.NET Core MVC

一、获取URL

定义一个静态类HttpRequestExtensions,写一个HttpRequest的扩展方法GetAbsoluteUri,需要引入 Microsoft.AspNetCore.Http.Abstractions包

using Microsoft.AspNetCore.Http;
using System.Text;

namespace AspNetCoreUrl
{
    public static class HttpRequestExtensions
    {
        public static string GetAbsoluteUri(this HttpRequest request)
        {
            return new StringBuilder()
                .Append(request.Scheme)
                .Append("://")
                .Append(request.Host)
                .Append(request.PathBase)
                .Append(request.Path)
                .Append(request.QueryString)
                .ToString();
        }
    }
}
GarsonZhang www.yesdotnet.com

其中关于 HttpRequest.Path 和 HttpRequest.PathBase 有什么不同,可以查看:

c# - What's the difference between HttpRequest.Path and HttpRequest.PathBase in ASP.NET Core? - Stack Overflow

然后我们就可以在使用HttpRequest时,调用该扩展方法来获取当前URL,例如下面我们在ASP.NET Core MVC的Controller中获取了当前URL:

public IActionResult Index()
{
    string url = HttpContext.Request.GetAbsoluteUri();
    this.ViewData["url"] = url;
    return View();
}

URL 获取成功

 

二、获取当前Controller/Action

在Controller中:

ControllerContext.ActionDescriptor.ControllerName
ControllerContext.ActionDescriptor.ActionName

在视图中

@ViewContext.RouteData.Values["Controller"]
@ViewContext.RouteData.Values["Action"]

在Filter拦截器中:

 

我们这里就以IAuthorizationFilter拦截器举例获取当前Controller/Action,其它Filter拦截器(IActionFilter、IResourceFilter、IExceptionFilter等)以此类推:

using Microsoft.AspNetCore.Mvc.Filters;
using System;

namespace AspNetCoreFilterContext.Filters
{
    public class AuthorizationFilterAttribute : Attribute, IAuthorizationFilter
    {
        public void OnAuthorization(AuthorizationFilterContext context)
        {
            string controllerName = context.RouteData.Values["Controller"].ToString();//通过ActionContext类的RouteData属性获取Controller的名称:Home
            string actionName = context.RouteData.Values["Action"].ToString();//通过ActionContext类的RouteData属性获取Action的名称:Index

            string fullActionName = context.ActionDescriptor.DisplayName;//通过ActionContext类的ActionDescriptor属性,也可以获取Action的名称
            //不过这样获取到的是Action的完全限定名:"AspNetCoreFilterContext.Controllers.HomeController.Index (AspNetCoreFilterContext)",可以看到其中还包含Controller的类名、命名空间和程序集名称
        }
    }
}

在HomeController上注册我们定义的IAuthorizationFilter拦截器AuthorizationFilterAttribute即可:

using Microsoft.AspNetCore.Mvc;
using AspNetCoreFilterContext.Filters;

namespace AspNetCoreFilterContext.Controllers
{
    [AuthorizationFilter]
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            string controllerName = ControllerContext.ActionDescriptor.ControllerName;
            string actionName = ControllerContext.ActionDescriptor.ActionName;

            return View();
        }
    }
}
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
YES开发框架
上一篇:微信 JS 接口签名校验工具 (qq.com)
下一篇:微信支付接口签名校验工具
评论列表

发表评论

评论内容
昵称:
关联文章

ASP.NET MVCASP.NET Core MVC获取当前URL/Controller/Action
ASP.NET Core MVC的路由约束
asp.net core MVC路由添加.html伪静态url时报错
ASP.NET Core MVC 在过滤器ActionFilter保存页面的生成的html静态页面文件
ASP.NET MVC使用@Url.Action 多个参数中间&被URL编码了
ASP.NET MVC快速入门(一)
asp.net - 在 ASP.NET Core MVC 嵌套 TagHelper
.NET 获得当前连接URL,Origin信息
.NETCore.NET5 MVC 控制器判断是否登录
ASP.NET+MVC入门踩坑笔记 (一) 创建项目 项目配置运行 以及简单的Api搭建
ASP.NET Core web API使用Swagger/OpenAPI(Swashbuckle)
asp.net core mvc修改cshtml试图热加载动态更新
获取URL参数的几种方式
C# ASP.NET Core开发学生信息管理系统(三)
从数据库或者其他位置加载ASP.NET MVC Views 视图 数据库中加载 cshtml
ASP.NET Core官网教程,资料查找
asp.net mvc Action直接返回图片不被浏览器缓存
C# ASP.NET Core开发学生信息管理系统(一)
【推荐】Razor文件编译 ASP.NET Core
C# asp.net mvc 创建虚拟目录

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码