Как получить доступ к текущему System.Web.Routing.RequestContext из пользовательского вспомогательного метода в ASP.NET MVC? - PullRequest
21 голосов
/ 09 декабря 2008

Я пишу вспомогательный метод для ASP.NET MVC, и мне нужно вызвать Url.Content, чтобы получить соответствующий URL для контекста. Однако, чтобы создать новый UrlHelper(), мне нужно получить текущий RequestContext (точнее, System.Web.Routing.RequestContext), и я не уверен, как его получить. Кто-нибудь знает?

Ответы [ 5 ]

46 голосов
/ 17 октября 2009

Если текущим IHttpHandler является MvcHandler, вы можете использовать

((MvcHandler)HttpContext.Current.Handler).RequestContext
19 голосов
/ 15 июня 2009

Заметил, что это все еще без ответа. Начиная с MVC 1.0 вы можете сделать:

public static string NewHelperMethod(this HtmlHelper helper)
{
    UrlHelper url = new UrlHelper(helper.ViewContext.RequestContext);
3 голосов
/ 23 августа 2009

Возможно, вы нашли ответ в другом месте, но здесь идет;

В действии контроллера вы можете получить доступ к текущему RequestContext следующим образом:

public ActionResult SomeAction(){
  var helper = new UrlHelper(this.ControllerContext.RequestContext);
  ...
}
2 голосов
/ 14 января 2009

Как уже упоминалось выше, просто расширьте HtmlHelper, и контекст будет представлен таким образом. Например:

    public static string ExtensionMethodName(this HtmlHelper html,object o)
    {
        html.ViewContext.HttpContext.Request.Uri ... etc    
    }
1 голос
/ 09 декабря 2008

Не создавайте новый. Просто расширьте существующий UrlHelper, точно так же, как вы расширяете HtmlHelper:

public static string IdLink(this UrlHelper helper, Guid id)
    { //...

Если вы должны использовать HtmlHelper и UrlHelper, передайте один из них как обычный (не "this") аргумент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...