ASP.NET MVC和ASP.NET Core MVC中获取当前URL/Controller/Action (转载)

时间:2023-01-29 11:50:17

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();
}

结果如下所示:

ASP.NET MVC和ASP.NET Core MVC中获取当前URL/Controller/Action (转载)

参考文献:

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

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 (转载)的更多相关文章

  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. MongoBD解决没有自动增长ID 的问题

    Sequence Numbers:序列号传统的数据库中,通常用一个递增的序列来提供主键,在 MongoDB中用 ObjectId 的来代替,我们可以通过如下的函数来获取主键 function coun ...

  2. android-------手写签名系统的设计与实现之实现画笔设置

    引自:http://www.xuebuyuan.com/1754358.html 既然我们实现了画布和画笔,也实现了手写,为了提高可用性,我们增加了对画笔风格的设置功能,这样就可以根据自己的需要选择画 ...

  3. 在使用MFC对话框时遇到的用户交互

    有时我们需要点击对话框上的一个按钮的时候,对话框隐藏起来,然后执行完某个操作后,对话框又弹出来, 这时我们可以使用BeginEditorCommand()和CompleteEditorCommand( ...

  4. Nancy.Net之旅-探索模块

    探索Nancy模块 模块是任何Nancy应用程序中的主角,因为它是您定义应用程序行为的地方,所以无法避免使用它. 事实上,在任何的Nancy应用程序中,声明模块是最基本的要求. 通过继承NancyMo ...

  5. Angular 过滤器

    <!DOCTYPE html><html ng-app="myApp"><head lang="en"> <meta ...

  6. 无脑博士的试管们--dfs搜素

    无脑博士有三个容量分别是A,B,C升的试管,A,B,C分别是三个从1到20的整数,最初,A和B试管都是空的,而C试管是装满硫酸铜溶液的.有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直到被灌试 ...

  7. Kubernetes – Ingress

    用户在 Kubernetes 上部署的服务一般运行于私有网络,Pod和Service 提供了 hostPort,NodePort等参数用于暴露这些服务端口到K8S节点上,供使用者访问.这样的方法有明显 ...

  8. RabbitMQ Dead Lettering&lpar;死信&rpar;

    死信,顾名思义,就是死掉的消息,死掉的消息是会被一般的队列丢弃的.如果这些消息很重要,而我们又需要,怎么办?凡事都有一个退路,现在就有一种方法可将这些死信消息存下来,那就是DLX(Dead Lette ...

  9. vue项目打包后图片路径问题

    当用vue-cli自动构建项目后,有两种运行方法,分别是: npm run dev : 提供一个开发的环境,自动热更新,资源使用绝对路径,所以可以正常看到背景图片. npm run build : 打 ...

  10. 用Visual studio2012在Windows8上开发内核驱动监视线程创建

    在Windows NT中,80386保护模式的“保护”比Windows 95中更坚固,这个“镀金的笼子”更加结实,更加难以打破.在Windows 95中,至少应用程序I/O操作是不受限制的,而在Win ...