ASP.NET MVC


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

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

  1. string url=Request.Url.ToString();

【2】获取虚拟目录名+页面名+参数:

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

【3】获取虚拟目录名+页面名:

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

【4】获取域名:

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

【5】获取参数:

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

【6】获取端口:

  1. Request.Url.Port

二、获取当前Controller/Action:

  1. RouteData.Route.GetRouteData(this.HttpContext).Values["controller"]
  2. RouteData.Route.GetRouteData(this.HttpContext).Values["action"]

  3. RouteData.Values["controller"]
  4. RouteData.Values["action"]

在视图中

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

  3. @ViewContext.RouteData.Values["controller"]
  4. @ViewContext.RouteData.Values["action"]

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

  1. ControllerContext.ParentActionViewContext.RouteData.Values["controller"]
  2. ControllerContext.ParentActionViewContext.RouteData.Values["action"]
  3. 在视图中
  4. @ViewContext.ParentActionViewContext.RouteData.Values["controller"]
  5. @CViewContext.ParentActionViewContext.RouteData.Values["action"]

参考文献:

asp.net MVC中获取当前URL/Controller/Action

ASP.NET Core MVC


一、获取URL:

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

  1. using Microsoft.AspNetCore.Http;
  2. using System.Text;
  3.  
  4. namespace AspNetCoreUrl
  5. {
  6. public static class HttpRequestExtensions
  7. {
  8. public static string GetAbsoluteUri(this HttpRequest request)
  9. {
  10. return new StringBuilder()
  11. .Append(request.Scheme)
  12. .Append("://")
  13. .Append(request.Host)
  14. .Append(request.PathBase)
  15. .Append(request.Path)
  16. .Append(request.QueryString)
  17. .ToString();
  18. }
  19. }
  20. }

其中关于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:

  1. public IActionResult Index()
  2. {
  3. string url = HttpContext.Request.GetAbsoluteUri();
  4. this.ViewData["url"] = url;
  5.  
  6. return View();
  7. }

结果如下所示:

参考文献:

asp.net core 获取当前请求的url

How to get current url in view in asp.net core 1.0

二、获取当前Controller/Action

在Controller中:

  1. ControllerContext.ActionDescriptor.ControllerName
  2. ControllerContext.ActionDescriptor.ActionName

在视图中:

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

在Filter拦截器中:

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

  1. using Microsoft.AspNetCore.Mvc.Filters;
  2. using System;
  3.  
  4. namespace AspNetCoreFilterContext.Filters
  5. {
  6. public class AuthorizationFilterAttribute : Attribute, IAuthorizationFilter
  7. {
  8. public void OnAuthorization(AuthorizationFilterContext context)
  9. {
  10. string controllerName = context.RouteData.Values["Controller"].ToString();//通过ActionContext类的RouteData属性获取Controller的名称:Home
  11. string actionName = context.RouteData.Values["Action"].ToString();//通过ActionContext类的RouteData属性获取Action的名称:Index
  12.  
  13. string fullActionName = context.ActionDescriptor.DisplayName;//通过ActionContext类的ActionDescriptor属性,也可以获取Action的名称
  14. //不过这样获取到的是Action的完全限定名:"AspNetCoreFilterContext.Controllers.HomeController.Index (AspNetCoreFilterContext)",可以看到其中还包含Controller的类名、命名空间和程序集名称
  15. }
  16. }
  17. }

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

  1. using Microsoft.AspNetCore.Mvc;
  2. using AspNetCoreFilterContext.Filters;
  3.  
  4. namespace AspNetCoreFilterContext.Controllers
  5. {
  6. [AuthorizationFilter]
  7. public class HomeController : Controller
  8. {
  9. public IActionResult Index()
  10. {
  11. string controllerName = ControllerContext.ActionDescriptor.ControllerName;
  12. string actionName = ControllerContext.ActionDescriptor.ActionName;
  13.  
  14. return View();
  15. }
  16. }
  17. }

下载ASP.NET Core MVC中Filter拦截器获取当前Controller/Action的示例代码

ASP.NET MVC和ASP.NET Core MVC中获取当前URL/Controller/Action (转载)的更多相关文章

  1. asp.net MVC中获取当前URL/Controller/Action

    一.获取URL(ASP.NET通用): [1]获取完整url(协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取虚拟目录名+页面 ...

  2. MVC教程二:从控制器中获取URL的值

    一.从控制器中获取URL的值有三种方式: 1.使用Request.QueryString[] 例如: string value = Request.QueryString["BookId&q ...

  3. 在ASP.NET MVC 中获取当前URL、controller、action 、参数

    URL的获取很简单,ASP.NET通用:[1]获取 完整url (协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取 虚拟目录名 ...

  4. 在ASP.NET MVC 中获取当前URL、controller、action

    一.URL的获取很简单,ASP.NET通用: [1]获取 完整url (协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取 虚拟 ...

  5. 在ASP.NET MVC 中获取当前URL、controller、action(转)

    URL的获取很简单,ASP.NET通用: [1]获取 完整url (协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取 虚拟目录 ...

  6. 如何在ASP.NET MVC 中获取当前URL、controller、action

    一.URL的获取很简单,ASP.NET通用: [1]获取 完整url (协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取 虚拟 ...

  7. asp.net中获取当前url的方法

    HttpContext.Current.Request.Url.ToString() 并不可靠. 如果当前URL为 http://localhost/search.aspx?user=http://c ...

  8. .Net Core api 中获取应用程序物理路径wwwroot

    如果要得到传统的ASP.Net应用程序中的相对路径或虚拟路径对应的服务器物理路径,只需要使用使用Server.MapPath()方法来取得Asp.Net根目录的物理路径,如下所示: // Classi ...

  9. 在MVC过滤器中获取触发的Controller、Action、参数 等

    首先是实现接口System.Web.Mvc.IActionFilter的过滤器 获取Controller.Action.参数 方法一. string actionName = filterContex ...

随机推荐

  1. html中用href 实现点击链接弹出文件下载对话框

    浏览器支持能够打开的格式,他都会默认直接在线打开(比如word或图片),不支持的格式,他就会弹出下载提示.最好是做成.rar格式.xlsx的文件.浏览器自带下载功能. <body> < ...

  2. Kotlin入门(2)让App开发变得更容易

    上一篇文章介绍了如何搭建Kotlin的开发环境,可是这个开发环境依然基于Android Studio,而在Android Studio上使用Java进行编码,本来就是理所应当的,何必还要专门弄个Kot ...

  3. loadrunner11中文版破解文档+录制脚本(图/文)

    下面是整理后的loadrunner11破解版的所有文件及操作步骤. LoadRunner11安装 1.Loadrunner11下载链接:https://pan.baidu.com/s/15Svt3kt ...

  4. XSS(跨站脚本攻击)漏洞解决方案

    首先,简单介绍一下XSS定义: 一 . XSS介绍 XSS是跨站脚本攻击(Cross Site Scripting)的缩写.为了和层叠样式表CSS(Cascading Style Sheets)加以区 ...

  5. [20171120]关于find 软连接问题.txt

    [20171120]关于find 软连接问题.txt --//上个星期为了测试oracle参数filesystemio_options,将数据库做了一次移动.但是我使用find对软链接目录查询时--/ ...

  6. [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 ...

  7. python第二十三天-----作业中

    #!usr/bin/env python #-*-coding:utf-8-*- # Author calmyan import os ,sys,time from core import trans ...

  8. Android (checkBox)

    1.使用 setOnCheckedChangeListener()方法对checkBox进行事件监听 2.重写方法 public void onCheckedChanged(CompoundButto ...

  9. 3.5Python数据处理篇之Numpy系列(五)---numpy文件的存取

    目录 目录: (一)以文本形式存取 1.说明: 2.语法解释: 3.实例(以.csv文件为例) 4.效果展示 (二)以任意的形式存取 1.说明: 2.语法解释: 3.实例(以.bat二进制文件为例) ...

  10. Linux 小知识翻译 - 「i386」是什么?

    i386是指 *CPU* 的种类,也可以指 *CPU* 的架构(architecture). 现在的 CPU 一般都用 「Core 2 Duo」或者「Athlon」,「Xeon」,「Opteron」之 ...