ASP.Net MVC 2.0: URL-адрес абсолютного действия только с использованием HttpRuntime (без HttpContext) - PullRequest
1 голос
/ 08 октября 2010

Мне нужно создать URL для самостоятельного пинга. Я хочу инициализировать этот URL из Application_Start, который не имеет HttpContext (в интегрированном режиме ISS 7.0).

У меня есть код для создания абсолютного URL-адреса действия с использованием HttpContext, теперь мне нужно то же самое, но вместо этого используйте HttpRuntime.

Ответы [ 2 ]

3 голосов
/ 08 октября 2010
using System;
using System.IO;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

class Program
{
    static void Main()
    {
        RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        RouteTable.Routes.MapRoute(
            "Default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

        var request = new HttpRequest("/", "http://foo.com", "");
        var response = new HttpResponse(new StringWriter());
        var httpContext = new HttpContext(request, response);
        var httpContextBase = new HttpContextWrapper(httpContext);
        var routeData = new RouteData();
        var requestContext = new RequestContext(httpContextBase, routeData);
        var urlHelper = new UrlHelper(requestContext, RouteTable.Routes);

        var url = urlHelper.Action("Index", "Home", new { id = "123" }, "http");
        Console.WriteLine(url);
    }
}
2 голосов
/ 08 октября 2010

Следующее сработало для меня.Возможно, это не самый красноречивый способ создания URL-адресов действий без запроса, но он работает.Улучшения приветствуются.

// Create an MVC UrlHelper to create our URL.
// Feed it with a mock RequestContext
UrlHelper urlHelper = new UrlHelper(
    new RequestContext(
        new HttpContextWrapper(
            new HttpContext(
                new HttpRequest("", "http://a.com", ""), // this can be any domain name -- it's not used in creating the URL
                new HttpResponse(new StringWriter()))),
        new RouteData()));

// UrlHelper creates a relative URL -- make sure to root it at our domain
Uri myNewUri = new Uri(
    new Uri("http://mydomain.com"),
    urlHelper.Action("myAction", "myController"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...