我正在寻找一种简单的方法(如果存在)在服务类中为 ASP.NET MVC 3 Web 应用程序中的指定控制器和操作生成 URL。我想在服务层做这个,因为需要把这个 URL 编码成二维码。
这在视图或控制器中很简单,因为 UrlHelper 可通过 System.Web.Mvc 获得,因此我可以在使用我的服务类的控制器操作中创建 URL 的开头,但我希望此时这样做QR码生成。
提前致谢。
具有不同层次的一个主要原因是关注点分离。服务层不应该关心请求路由。
我会将 URL 传递到服务层,并让服务层返回生成的二维码。
我了解关注点分离,但有时开发人员必须做开发人员必须做的事情!
所以这就是我所做的:
var Url = new UrlHelper(HttpContext.Current.Request.RequestContext);
var myUrl = Url.RouteUrl("routeName", new { controller="ControllerName", action="Index", area="", otherDictionaryEntries="otherId"});
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¶m2=myparam2"
我们不要忘记通过 Program.cs 添加我们的服务
builder.Services.AddHttpContextAccessor();