我目前正在使用Request.Scheme和Request.Host来合成Uri对象,以获取我的.net核心MVC应用程序的AbsoluteUri。
Uri location = new Uri($"{Request.Scheme}://{Request.Host}");
string applicationRootURL = location.AbsoluteUri;
但这仅适用于非静态方法。
由于我需要在另一个控制器中重用此方法,我想将此操作方法设为静态。如果我这样做,编译器将抱怨Request.Scheme和Request.Host。
我想知道我还有什么其他方法可以实现这个目标?
谢谢。
更新
这是我使用ActionMethodA
的ControllerApublic class ControllerA
{
public bool ActionMethodA()
{
Uri location = new Uri($"{Request.Scheme}://{Request.Host}");
string applicationRootURL = location.AbsoluteUri;
return false;
}
}
在另一个ControllerB中,我希望ActionMethodB从ControllerA调用ActionMethodA:
public class ControllerB
{
public void ActionMethodB()
{
var result = ActionMethodA();
}
}
为ControllerA创建扩展方法是处理这种情况的最佳方法吗?
谢谢。
答案 0 :(得分:0)
您还可以直接为HttpRequest类定义扩展方法,并使用BuildAbsolute类的UriHelper方法构建uri。
public static class HttpRequestExtensions
{
public static string GetURI(this HttpRequest request)
{
return UriHelper.BuildAbsolute(request.Scheme, request.Host);
}
}
并使用它:
public IActionResult ContollerMethod()
{
var uri = Request.GetURI();
// your code
}
答案 1 :(得分:-1)
您可以将扩展方法写入控制器或HttpContext对象。在以下示例中,我向控制器添加了扩展方法。
public static class ControllerExtensions
{
public static string GetURI(this Controller controller)
{
Uri location = new Uri($"{ controller.Request.Scheme}://{controller.Request.Host}");
string applicationRootURL = location.AbsoluteUri;
return applicationRootURL;
}
}
编写扩展方法后,您可以按以下方式调用它。
public IActionResult Index()
{
var url = this.GetURI();
return View();
}
确保在您的通话代码中导入扩展方法的命名空间