Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC控制器中获取上一个操作和控制器的名称_C#_Asp.net Mvc_Asp.net Mvc 2 - Fatal编程技术网

C# 在MVC控制器中获取上一个操作和控制器的名称

C# 在MVC控制器中获取上一个操作和控制器的名称,c#,asp.net-mvc,asp.net-mvc-2,C#,Asp.net Mvc,Asp.net Mvc 2,我可以获得当前操作和控制器的名称,如下所示: string controllername = this.ValueProvider.GetValue("controller").RawValue.ToString(); string actionname = this.ValueProvider.GetValue("action").RawValue.ToString(); string MyReferrer = Request.UrlReferrer.

我可以获得当前操作和控制器的名称,如下所示:

string controllername = this.ValueProvider.GetValue("controller").RawValue.ToString();
string actionname = this.ValueProvider.GetValue("action").RawValue.ToString();
string MyReferrer = Request.UrlReferrer.ToString();
我还可以通过以下方式获取参考URL:

string controllername = this.ValueProvider.GetValue("controller").RawValue.ToString();
string actionname = this.ValueProvider.GetValue("action").RawValue.ToString();
string MyReferrer = Request.UrlReferrer.ToString();

但是,如何在MVC 2控制器中获取上一个操作和控制器的名称呢?

asp.net MVC不提供此功能,因为http是无状态的,但是您可以使用会话或cookie存储此路径

我的第一次尝试是从请求对象中的引用URL解析上一个路径。

将此值存储在tempdata中,或查找引用路由(通过URL)以获得实际的路由对象,然后查看其控制器和操作属性。为了获得这一点,您需要能够从URL查找路由。为此,请参考Phil Haacks代码(还有其他代码)查找路由。以下列出了各种方法:


考虑使用ASP.NET MVC TempData

它将为您提供跨当前请求和下一个请求的持久性,这样您就可以在那里存储路由信息,就像上次调用的操作一样

在处理下一个请求后,TempData中的数据将从内存中释放(与ASP.NET会话对象相反,它将在会话超时或终止时释放内存)。

这应该可以工作

// Home is default controller
var controller = (Request.UrlReferrer.Segments.Skip(1).Take(1).SingleOrDefault() ?? "Home").Trim('/'); 

// Index is default action 
var action = (Request.UrlReferrer.Segments.Skip(2).Take(1).SingleOrDefault() ?? "Index").Trim('/'); 

我可以通过以下方式获取reffer url:string myreferer=Request.urlreferer.ToString(),但我不知道如何从url中提取名称?简单的方法是将“/”上的字符串拆分为一个数组,然后分别使用控制器和操作名称访问插槽。您还可以使用AbsolutePath属性(Request.urlReferer.AbsolutePath)仅获取域后面的部分。当然,该行为可能存在,也可能不存在,此时您需要进行测试,并假设“索引”或您的默认行为是什么。不确定它是否对您重要,但推荐人可以伪造。如果这是一个安全问题,请考虑一下。这可能对你有用: