Asp.net core 如何在静态方法中检索.NETCore中的当前应用程序根URL?
我目前正在使用Request.Scheme和Request.Host到复合Uri对象来为我的.net核心MVC应用程序获取绝对UriAsp.net core 如何在静态方法中检索.NETCore中的当前应用程序根URL?,asp.net-core,.net-core,asp.net-core-mvc,uri,asp.net-core-2.0,Asp.net Core,.net Core,Asp.net Core Mvc,Uri,Asp.net Core 2.0,我目前正在使用Request.Scheme和Request.Host到复合Uri对象来为我的.net核心MVC应用程序获取绝对Uri Uri location = new Uri($"{Request.Scheme}://{Request.Host}"); string applicationRootURL = location.AbsoluteUri; 但这只适用于非静态方法 由于我需要在另一个控制器中重复使用此方法,我正在考虑将此动作方法设置为静态。如果我这样做,编译器会抱怨Request
Uri location = new Uri($"{Request.Scheme}://{Request.Host}");
string applicationRootURL = location.AbsoluteUri;
但这只适用于非静态方法
由于我需要在另一个控制器中重复使用此方法,我正在考虑将此动作方法设置为静态。如果我这样做,编译器会抱怨Request.Scheme和Request.Host
我想知道我有什么其他的选择来实现这一点
多谢各位
更新:
这就是我为ControllerA提供的ActionMethodA
public 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的扩展方法是处理这种情况的最合适的方法吗
谢谢。您可以将扩展方法写入控制器或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();
}
确保在调用代码中导入扩展方法的命名空间您可以将扩展方法写入控制器或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();
}
确保在调用代码中导入扩展方法的名称空间您还可以直接为类定义扩展方法,并使用类的方法构建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
}
您还可以直接为类定义扩展方法,并使用类的方法来构建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
}
在HttpContext的扩展方法中生成…抱歉,没有弄清楚如何生成。但是计划在不使方法静态的情况下实现该解决方案。这是HttpContext扩展方法中C Make最基本和最常用的功能之一…抱歉,我不知道如何实现。但是计划在不使方法静态的情况下实现该解决方案。这是C语言中最基本和最常用的特性之一。我想让ControllerMethod成为静态的,所以在另一个控制器中,我可以调用这个ControllerMethod,比如var result=ControllerMethod;直接地可能吗?@XiaoHan静态方法中没有对请求对象的实例引用。所以我认为这是不可能的。谢谢。在静态方法中有没有其他方法可以获取应用程序URL?@XiaoHan在无参数静态方法中?我不认为有任何其他方法可以实现它。不一定,可以传递任何参数。谢谢。我想让ControllerMethod成为静态的,所以在另一个控制器中,我可以调用这个ControllerMethod,比如var result=ControllerMethod;直接地可能吗?@XiaoHan静态方法中没有对请求对象的实例引用。所以我认为这是不可能的。谢谢。在静态方法中有没有其他方法可以获取应用程序URL?@XiaoHan在无参数静态方法中?我不认为有任何其他方法可以实现它。不一定,可以传递任何参数。如果我想使索引静态,它仍然工作吗?如果我想使索引静态,它仍然工作吗?