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】获取参数:
- 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
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();
- }
- }
- }
其中关于HttpRequest.Path和HttpRequest.PathBase有什么不同,可以查看:
What's the difference between HttpRequest.Path and HttpRequest.PathBase in ASP.NET Core?
然后我们就可以在使用HttpRequest时,调用该扩展方法来获取当前URL,例如下面我们在ASP.NET Core MVC的Controller中获取了当前URL:
- public IActionResult Index()
- {
- string url = HttpContext.Request.GetAbsoluteUri();
- this.ViewData["url"] = url;
- return View();
- }
结果如下所示:
参考文献:
How to get current url in view in asp.net core 1.0
二、获取当前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();
- }
- }
- }
下载ASP.NET Core MVC中Filter拦截器获取当前Controller/Action的示例代码
ASP.NET MVC和ASP.NET Core MVC中获取当前URL/Controller/Action (转载)的更多相关文章
- asp.net MVC中获取当前URL/Controller/Action
一.获取URL(ASP.NET通用): [1]获取完整url(协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取虚拟目录名+页面 ...
- MVC教程二:从控制器中获取URL的值
一.从控制器中获取URL的值有三种方式: 1.使用Request.QueryString[] 例如: string value = Request.QueryString["BookId&q ...
- 在ASP.NET MVC 中获取当前URL、controller、action 、参数
URL的获取很简单,ASP.NET通用:[1]获取 完整url (协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取 虚拟目录名 ...
- 在ASP.NET MVC 中获取当前URL、controller、action
一.URL的获取很简单,ASP.NET通用: [1]获取 完整url (协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取 虚拟 ...
- 在ASP.NET MVC 中获取当前URL、controller、action(转)
URL的获取很简单,ASP.NET通用: [1]获取 完整url (协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取 虚拟目录 ...
- 如何在ASP.NET MVC 中获取当前URL、controller、action
一.URL的获取很简单,ASP.NET通用: [1]获取 完整url (协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取 虚拟 ...
- asp.net中获取当前url的方法
HttpContext.Current.Request.Url.ToString() 并不可靠. 如果当前URL为 http://localhost/search.aspx?user=http://c ...
- .Net Core api 中获取应用程序物理路径wwwroot
如果要得到传统的ASP.Net应用程序中的相对路径或虚拟路径对应的服务器物理路径,只需要使用使用Server.MapPath()方法来取得Asp.Net根目录的物理路径,如下所示: // Classi ...
- 在MVC过滤器中获取触发的Controller、Action、参数 等
首先是实现接口System.Web.Mvc.IActionFilter的过滤器 获取Controller.Action.参数 方法一. string actionName = filterContex ...
随机推荐
- html中用href 实现点击链接弹出文件下载对话框
浏览器支持能够打开的格式,他都会默认直接在线打开(比如word或图片),不支持的格式,他就会弹出下载提示.最好是做成.rar格式.xlsx的文件.浏览器自带下载功能. <body> < ...
- Kotlin入门(2)让App开发变得更容易
上一篇文章介绍了如何搭建Kotlin的开发环境,可是这个开发环境依然基于Android Studio,而在Android Studio上使用Java进行编码,本来就是理所应当的,何必还要专门弄个Kot ...
- loadrunner11中文版破解文档+录制脚本(图/文)
下面是整理后的loadrunner11破解版的所有文件及操作步骤. LoadRunner11安装 1.Loadrunner11下载链接:https://pan.baidu.com/s/15Svt3kt ...
- XSS(跨站脚本攻击)漏洞解决方案
首先,简单介绍一下XSS定义: 一 . XSS介绍 XSS是跨站脚本攻击(Cross Site Scripting)的缩写.为了和层叠样式表CSS(Cascading Style Sheets)加以区 ...
- [20171120]关于find 软连接问题.txt
[20171120]关于find 软连接问题.txt --//上个星期为了测试oracle参数filesystemio_options,将数据库做了一次移动.但是我使用find对软链接目录查询时--/ ...
- [SQL SERVER] The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON. (Microsoft SQL Server, Error: 15128)
The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON. (Microsof ...
- python第二十三天-----作业中
#!usr/bin/env python #-*-coding:utf-8-*- # Author calmyan import os ,sys,time from core import trans ...
- Android (checkBox)
1.使用 setOnCheckedChangeListener()方法对checkBox进行事件监听 2.重写方法 public void onCheckedChanged(CompoundButto ...
- 3.5Python数据处理篇之Numpy系列(五)---numpy文件的存取
目录 目录: (一)以文本形式存取 1.说明: 2.语法解释: 3.实例(以.csv文件为例) 4.效果展示 (二)以任意的形式存取 1.说明: 2.语法解释: 3.实例(以.bat二进制文件为例) ...
- Linux 小知识翻译 - 「i386」是什么?
i386是指 *CPU* 的种类,也可以指 *CPU* 的架构(architecture). 现在的 CPU 一般都用 「Core 2 Duo」或者「Athlon」,「Xeon」,「Opteron」之 ...