gpt4 book ai didi

c# - ASP.Net MVC 4 w/AttributeRouting 和多个 RoutePrefix 属性

转载 作者:太空狗 更新时间:2023-10-29 22:37:04 24 4
gpt4 key购买 nike

长话短说

我需要一种方法来在我的 MVC 应用程序中根据用户的属性生成 URL 时以编程方式选择选择哪个 RoutePrefix

不是 TL;DR

我有一个 MVC 4 应用程序(带有 AttributeRouting NuGet 包)

由于托管环境的要求,我的很多操作必须有两条路由,以便托管环境可以有不同的访问权限。

我通过用 [RoutePrefix("full")] [RoutePrefix("lite)] 装饰我的 Controller 来解决这个问题。它允许每个操作方法是通过/full/{action} 和/lite/{action} 访问。

这非常有效。

[RoutePrefix("full")]
[RoutePrefix("lite")]
public class ResultsController : BaseController
{
// Can be accessed via /full/results/your-results and /lite/results/your-results and
[Route("results/your-results")]
public async Task<ActionResult> All()
{
}

}

但是,每个用户只能在他们的 url 中使用 full 或 lite,这取决于该用户的某些属性。

显然,当我使用 RedirectToAction()@Html.ActionLink() 时,它只会选择第一个可用的路由,而不会保留“正确”的前缀。

我认为我可以覆盖 RedirectToAction() 方法并添加我自己的 @Html.ActionLink() 方法版本。

这会起作用,但它会涉及一些讨厌的代码来生成 URL,因为我得到的只是一个表示操作和 Controller 的字符串,而不是反射(reflect)的类型。也可能有路由属性,例如在我的示例中,因此我将不得不复制大量内置代码的 MVC。

对于我正在尝试解决的问题,是否有更好的解决方案?

最佳答案

怎么样:

[RoutePrefix("{version:regex(^full|lite$)}")]

然后,当您创建链接时:

@Url.RouteUrl("SomeRoute", new { version = "full" })

或者

@Url.RouteUrl("SomeRoute", new { version = "lite" })

您甚至可以执行以下操作来保留已经设置的内容:

@Url.RouteUrl("SomeRoute", new { version = Request["version"] })

关于c# - ASP.Net MVC 4 w/AttributeRouting 和多个 RoutePrefix 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26529743/

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