gpt4 book ai didi

attributerouting - MVC 5 如何使用属性路由指定约束

转载 作者:行者123 更新时间:2023-12-01 23:43:49 27 4
gpt4 key购买 nike

我正在尝试做全属性路由,没有常规路由,并试图根据当前域告诉我的路由它们属于哪个区域。

在约定路由中,我可以以此为例指定我的对象约束:

context.MapRoute(
"MyRouteName",
"admin/sign-in",
new { controller="AdminController", action="SignIn" },
new { SitePermitted = new SiteConstraint("Admin") } // <-- how do I do this exact line of code but in attribute routing
);

其中SiteConstraint继承自IRouteConstraint。我如何做同样的事情,但使用属性路由?我正在寻找这样的东西:

[AreaName("Admin")]
[Route("admin/sign-in")]
[new SiteConstraint("Admin")]
public ActionResult SignIn(...) {...}

MyConstraint 有一个获取当前 http 请求的 Match 方法,如果它的域是“myadmindomain.com”,那么 Match 方法返回 true,假设用户在 myadmindomain.com/admin/sign-in 上,MVC 将执行此路由。

最佳答案

您想做的事情需要使用类 RouteFactoryAttribute ,在继承自该类的 MVC 5 中,您可以使用 SiteConstraint 但使用属性路由。所以你可以有这样的东西:

public class SiteRouteAttribute : RouteFactoryAttribute
{
public SiteRouteAttribute (string template, string sitePermitted) : base(template)
{
SitePermitted = sitePermitted;
}

public override RouteValueDictionary Constraints
{
get
{
var constraints = new RouteValueDictionary();
constraints.Add("site", new SiteConstraint(SitePermitted));
return constraints;
}
}

public string SitePermitted
{
get;
private set;
}
}

然后在你的 Controller 中你可以:

[SiteRoute("somepath/{somevariable}/{action=Index}", "Admin")]
public class MyController : Controller
{
public ActionResult Index()
{
....
}
}

看看Jon Galloway's post which has a workable example

关于attributerouting - MVC 5 如何使用属性路由指定约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30110137/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com