如何在ASP.NET MVC 3项目的服务层生成URL

问题描述 投票:0回答:3

我正在寻找一种简单的方法(如果存在)在服务类中为 ASP.NET MVC 3 Web 应用程序中的指定控制器和操作生成 URL。我想在服务层做这个,因为需要把这个 URL 编码成二维码。

这在视图或控制器中很简单,因为 UrlHelper 可通过 System.Web.Mvc 获得,因此我可以在使用我的服务类的控制器操作中创建 URL 的开头,但我希望此时这样做QR码生成。

提前致谢。

c# asp.net-mvc-3 url web-applications service-layer
3个回答
12
投票

具有不同层次的一个主要原因是关注点分离。服务层不应该关心请求路由。

我会将 URL 传递到服务层,并让服务层返回生成的二维码。


6
投票

我了解关注点分离,但有时开发人员必须做开发人员必须做的事情!

所以这就是我所做的:

var Url = new UrlHelper(HttpContext.Current.Request.RequestContext);
var myUrl = Url.RouteUrl("routeName", new { controller="ControllerName", action="Index", area="", otherDictionaryEntries="otherId"});

0
投票
private readonly LinkGenerator _urlHelper;
private readonly IHttpContextAccessor _httpContextAccessor;

public MyUrlService(LinkGenerator urlHelper, IHttpContextAccessor httpContextAccessor)
{
    _urlHelper = urlHelper;
    _httpContextAccessor = httpContextAccessor;
}

public string MyCreateUrl() 
{ 
    var url = _urlHelper.GetUriByAction("Index1", "Home", new { param1 = "myparam1", param2 = "myparam2" }, _httpContextAccessor.HttpContext!.Request.Scheme, _httpContextAccessor.HttpContext.Request.Host); 
}

网址输出:

"http://localhost:5241/Home/Index1?param1=myparam1&param2=myparam2"

我们不要忘记通过 Program.cs 添加我们的服务

builder.Services.AddHttpContextAccessor();
© www.soinside.com 2019 - 2024. All rights reserved.