這樣的屬性不存在註冊。但是你可以自己創建一個:
[AttributeUsage(AttributeTargets.Class)]
public class ControllerNameAttribute : Attribute
{
public string Name { get; }
public ControllerNameAttribute(string name)
{
Name = name;
}
}
應用它的控制器上:
[ControllerName("Test")]
public class HomeController : Controller
{
}
然後創建一個自定義的控制器約定:
public class ControllerNameAttributeConvention : IControllerModelConvention
{
public void Apply(ControllerModel controller)
{
var controllerNameAttribute = controller.Attributes.OfType<ControllerNameAttribute>().SingleOrDefault();
if (controllerNameAttribute != null)
{
controller.ControllerName = controllerNameAttribute.Name;
}
}
}
而且它在啓動時加入MVC公約。 cs:
services.AddMvc(mvc =>
{
mvc.Conventions.Add(new ControllerNameAttributeConvention());
});
現在HomeController
索引操作將響應/Test/Index
。 Razor標籤助手屬性可以設置爲你想要的。
唯一的缺點是至少ReSharper在Razor中有點受傷。它不知道約定,所以它認爲asp-controller
屬性是錯誤的。
我用[ApiVersion(「1.0」)] [Route(「api/v {version:apiVersion}/[controller]」)]] –