对不起基本问题。
在Global.asax
内,我希望获得控制器操作的绝对路径,就像我们从任何地方调用Response.Redirect("~/subfolder")
或从我们的视图中调用@Url.Content("~/controller/action")
一样。< / p>
在我的Global.asax事件中,我想做这样的事情:
protected void Application_BeginRequest(object sender, EventArgs args)
{
if ( string.Compare(HttpContext.Current.Request.RawUrl, "~/foo", true) == 0 )
// do something
// I'd like the "~foo" to resolve to the virtual path relative to
// the application root
}
答案 0 :(得分:6)
你可以简单地获得像这样的控制器和动作名称
protected void Application_BeginRequest(object sender, EventArgs args)
{
HttpContextBase currentContext = new HttpContextWrapper(HttpContext.Current);
UrlHelper urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
RouteData routeData = urlHelper.RouteCollection.GetRouteData(currentContext);
string action = routeData.Values["action"] as string;
string controller = routeData.Values["controller"] as string;
if (string.Compare(controller, "foo", true) == 0)
// do something
// if the controller for current request if foo
}
答案 1 :(得分:0)
最好创建一个ActionFilterAttribute并覆盖OnActionExecuting方法,如下所示:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.ActionDescriptor.ActionName == "Foo")
{
// do something
}
base.OnActionExecuting(filterContext);
}
然后,您可以在BaseController上应用该属性,例如。
答案 2 :(得分:0)
void Session_Start(object sender, EventArgs e)
{
if (Session.IsNewSession && Session["SessionExpire"] == null)
{
//Your code
}
}
您有很多选择可以做到这一点。但我不建议使用Global.asax
位置进行此类比较
这也是非常重要的方法。您可以使用HttpModule
。
Base Controller class
您可以将动作过滤器应用于整个Controller类,如下所示
namespace MvcApplication1.Controllers
{
[MyActionFilter]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
return View();
}
}
}
每当调用Home控制器公开的任何操作时 - Index()方法或About()方法,Action Filter类将首先执行。
namespace MvcApplication1.ActionFilters
{
public class MyActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//Your code for comparison
}
}
}
如果你注意上面的代码,OnActionExecuting将在执行Action Method之前执行
使用此方法将仅为Index方法执行OnActionExecuting
。
namespace MvcApplication1.Controllers
{
public class DataController : Controller
{
[MyActionFilter]
public string Index()
{
//Your code for comparison
}
}
}
RouteData.Values["controller"] //to get the current Controller Name
RouteData.Values["action"] //to get the current action Name