从.NET Core MVC中的操作方法解析操作URL

时间:2018-02-12 12:24:52

标签: c# asp.net-mvc asp.net-core asp.net-core-mvc

我有这样的控制器代码:

[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,它们可能在/之前或之前等等。但我想知道这是否可能,无论是在运行时还是在编译时。

2 个答案:

答案 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())