我有这样的控制器代码:
[Route("api/[controller]")]
public class ValuesController : Controller
{
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
[HttpGet("[action]")]
public IEnumerable<string> Foo()
{
return new string[] { "value1", "value2" };
}
}
我希望找到这些方法的URL,使用反射或类似nameof
的方法。
如果可以从应用程序的任何地方调用它,或者至少在中间件中能够通过操作过滤请求,那将是很棒的。
我希望看到的结果是:
GetUrl(ValuesController.Get)
,我得到api/Values
GetUrl(ValuesController.Foo)
,我得到api/Values/Foo
我不需要这些形式的URL,它们可能在/
之前或之前等等。但我想知道这是否可能,无论是在运行时还是在编译时。
答案 0 :(得分:0)
UrlHelper的Action功能正是您所寻找的:
UrlHelper u = new UrlHelper(this.ControllerContext.RequestContext);
string url = u.Action(varControllerNameUsingReflection, varActionNameUsingReflection, null);
答案 1 :(得分:0)
如果您在同一控制器中执行该操作,并且还希望获得完整的URL:
var notificationUrl = this.Url.Action(
nameof(ControllerActionMethod),
this.ControllerContext.ActionDescriptor.ControllerName,
null,
this.HttpContext.Request.Protocol,
this.HttpContext.Request.Host.ToString())