Ein solches Attribut existiert nicht. Aber man kann man selbst erstellen:
[AttributeUsage(AttributeTargets.Class)]
public class ControllerNameAttribute : Attribute
{
public string Name { get; }
public ControllerNameAttribute(string name)
{
Name = name;
}
}
Wenden Sie es auf Ihrem Controller:
[ControllerName("Test")]
public class HomeController : Controller
{
}
Dann eine benutzerdefinierte Controller Konvention erstellen:
public class ControllerNameAttributeConvention : IControllerModelConvention
{
public void Apply(ControllerModel controller)
{
var controllerNameAttribute = controller.Attributes.OfType<ControllerNameAttribute>().SingleOrDefault();
if (controllerNameAttribute != null)
{
controller.ControllerName = controllerNameAttribute.Name;
}
}
}
und fügen Sie es MVC-Konventionen in Startup. cs:
services.AddMvc(mvc =>
{
mvc.Conventions.Add(new ControllerNameAttributeConvention());
});
Jetzt HomeController
Die Indexaktion reagiert auf /Test/Index
. Razor-Tag-Helferattribute können beliebig festgelegt werden.
Einziger Nachteil ist, dass zumindest ReSharper in Razor ein wenig gebrochen ist. Es ist sich der Konvention nicht bewusst, daher hält es das Attribut asp-controller
für falsch.
Ich benutze [Route ("api/v {Version: apiVersion}/[Controller]")] mit [ApiVersion ("1.0")] –