Я пишу вспомогательный метод для ASP.NET MVC, и мне нужно вызвать Url.Content, чтобы получить соответствующий URL для контекста. Однако, чтобы создать новый UrlHelper(), мне нужно получить текущий RequestContext (System.Web.Routing.RequestContext, если быть точным), и я не уверен, как его захватить. Кто-нибудь знает?
Как получить доступ к текущему System.Web.Routing.RequestContext из пользовательского вспомогательного метода в ASP.NET MVC?
Ответ 1
Заметили, что это все еще остается без ответа. С MVC 1.0 вы можете сделать:
public static string NewHelperMethod(this HtmlHelper helper)
{
UrlHelper url = new UrlHelper(helper.ViewContext.RequestContext);
Ответ 2
Если текущий IHttpHandler является MvcHandler, вы можете использовать
((MvcHandler)HttpContext.Current.Handler).RequestContext
Ответ 3
Возможно, вы нашли ответ в другом месте, но здесь:
В действии контроллера вы можете перейти к текущему RequestContext следующим образом:
public ActionResult SomeAction(){
var helper = new UrlHelper(this.ControllerContext.RequestContext);
...
}
Ответ 4
Не создавайте новую. Просто расширьте существующий UrlHelper, точно так же, как вы расширили HtmlHelper:
public static string IdLink(this UrlHelper helper, Guid id)
{ //...
Если вы должны использовать как HtmlHelper, так и UrlHelper, передайте один из них как обычный (не "this") аргумент.
Ответ 5
Как упоминалось выше, просто расширьте HtmlHelper, и контекст будет показан таким образом. Например:
public static string ExtensionMethodName(this HtmlHelper html,object o)
{
html.ViewContext.HttpContext.Request.Uri ... etc
}