在库项目中获取操作,控制器和区域名称

Sae*_*eid 0 dll asp.net-mvc asp.net-mvc-3

我有一个MVC3项目和一个库(.dll)项目包含了我的一些代码,所以我需要在库项目中获取区域,控制器和动作名称,我在MVC项目中使用以下行:

string areaName = (string)Request.RequestContext.RouteData.DataTokens["area"] ?? "Root";
string controllerName = (string)Request.RequestContext.RouteData.Values["controller"];
string actionName = (string)Request.RequestContext.RouteData.Values["action"];
Run Code Online (Sandbox Code Playgroud)

但是在库项目中Request,我添加时无法访问任何对象using System.Web.Mvc;

public static void GetNames(){

  //string areaName = (string)Request.RequestContext.RouteData.DataTokens["area"] ?? "Root";
  //string controllerName = (string)Request.RequestContext.RouteData.Values["controller"];
  //string actionName = (string)Request.RequestContext.RouteData.Values["action"];

}
Run Code Online (Sandbox Code Playgroud)

那么,我怎样才能在图书馆项目中获得这个名字?

Dar*_*rov 6

最好的方法是将它们作为参数传递,而不是让类库获取它们,因为这样您就可以将类库与Web应用程序强耦合.

但如果你坚持要它们,你将不得不使用HttpContext.Current我不推荐的:

var context = new HttpContextWrapper(HttpContext.Current);
var rd = context.Request.RequestContext.RouteData;
string controller = rd.GetRequiredString("controller");
string action = rd.GetRequiredString("action");
Run Code Online (Sandbox Code Playgroud)