답변:
유용한 팁 : 모든 ASP.NET 응용 프로그램에서 현재 HttpContext에 대한 참조를 얻을 수 있습니다.
HttpContext.Current
System.Web에서 파생됩니다. 따라서 다음은 ASP.NET MVC 응용 프로그램의 어느 곳에서나 작동합니다.
UrlHelper url = new UrlHelper(HttpContext.Current.Request.RequestContext);
url.Action("ContactUs"); // Will output the proper link according to routing info
예:
public class MyModel
{
public int ID { get; private set; }
public string Link
{
get
{
UrlHelper url = new UrlHelper(HttpContext.Current.Request.RequestContext);
return url.Action("ViewAction", "MyModelController", new { id = this.ID });
}
}
public MyModel(int id)
{
this.ID = id;
}
}
Link
생성 된 MyModel 객체 에서 속성을 호출하면 Global.asax의 라우팅을 기반으로 모델을 볼 수있는 유효한 Url이 반환됩니다.
using
모두 System.Web
와System.Web.Mvc
나는 Omar의 대답을 좋아하지만 그것은 나를 위해 작동하지 않습니다. 기록을 위해 이것은 현재 사용중인 솔루션입니다.
var httpContext = HttpContext.Current;
if (httpContext == null) {
var request = new HttpRequest("/", "http://example.com", "");
var response = new HttpResponse(new StringWriter());
httpContext = new HttpContext(request, response);
}
var httpContextBase = new HttpContextWrapper(httpContext);
var routeData = new RouteData();
var requestContext = new RequestContext(httpContextBase, routeData);
return new UrlHelper(requestContext);
UrlHelper는 다음을 사용하여 Controller 조치 내에서 구성 할 수 있습니다.
var url = new UrlHelper(this.ControllerContext.RequestContext);
url.Action(...);
컨트롤러 외부에서 RouteTable.Routes RouteData에서 RequestContext를 만들어 UrlHelper를 구성 할 수 있습니다.
HttpContextWrapper httpContextWrapper = new HttpContextWrapper(System.Web.HttpContext.Current);
UrlHelper urlHelper = new UrlHelper(new RequestContext(httpContextWrapper, RouteTable.Routes.GetRouteData(httpContextWrapper)));
(Brian의 답변을 바탕으로 사소한 코드 수정이 추가되었습니다.)
var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
this.ControllerContext.RequestContext
A는 HttpRequestContext
, 그리고 생성자 UrlHelper
예상하는 RequestContext
. 두 클래스는 서로 관련이 없습니다.
예, 인스턴스화 할 수 있습니다. 당신은 다음과 같은 것을 할 수 있습니다 :
var ctx = new HttpContextWrapper(HttpContext.Current);
UrlHelper helper = new UrlHelper(
new RequestContext(ctx,
RouteTable.Routes.GetRouteData(ctx));
RouteTable.Routes
정적 속성이므로 여기서 확인해야합니다. 얻을 HttpContextBase
참조를 HttpContextWrapper
참조 소요 HttpContext
, 그리고 HttpContext
그을 제공합니다.
나는 당신이 찾고있는 것이 이것이라고 생각합니다.
Url.Action("ActionName", "ControllerName");