【问题标题】:Generating a URL independant of controllers in ASP.NET MVC 3在 ASP.NET MVC 3 中生成独立于控制器的 URL
【发布时间】:2013-02-13 01:26:49
【问题描述】:

我有一个 mvc 3 应用程序,它有一个后台线程检查某些数据库项的状态。当它发现一个过期的项目时,它会发送一封电子邮件。在电子邮件中,我想包含要调用以查看状态的操作的 url。如果这是从控制器完成的,我会使用 UrlHelper,例如:

string body_url = "For more details see: " + Url.Action("Details", "MyOrder", new { OrderId = order.OrderId }, Constants.HttpProtocol);

但是,我不在控制器中,我的方法也不是从控制器调用的,它是在应用程序启动时启动的。有没有办法在独立于控制器的情况下生成有效的 UrlHelper,或者如果没有,在不使用硬编码路径的情况下生成有效的 URL?

【问题讨论】:

    标签: c# asp.net-mvc-3 urlhelper


    【解决方案1】:

    这是理论上的......参考msdnso......在后台线程上让事情变得有趣:)

    var request = new HttpRequest("/", "http://example.com", ""); //hopefully you can hardcode this or pull from config?
    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);
    var url = urlHelper.Action("ActionName", "ControllerName");
    

    【讨论】:

    • 不得不硬编码基本 URL 似乎是一种耻辱,特别是考虑到它可能会根据我是在运行测试还是生产环境而改变。我希望有某种方法可以从应用程序中获取基本 URL。
    • 您可以在启动时将 HttpContext.Current 信息传递到后台线程中。但请确保只使用它的基本 url 部分! stackoverflow.com/questions/3398717/…
    • HttpContext.Current 在应用程序启动时不可用,此时@SimonParker 希望能够生成路由 URL。
    • @SimonParker 您可以使用Microsoft.Web.Administration.WebConfigurationManager 做一些棘手的事情,以在运行时获取当前站点绑定的列表。然后你可以抓住第一个绑定。这很丑,但它有效!
    猜你喜欢
    • 2011-09-13
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    相关资源
    最近更新 更多