gpt4 book ai didi

c# - ASP.NET MVC 3 - 区域路由的边缘案例

转载 作者:太空宇宙 更新时间:2023-11-03 20:32:30 26 4
gpt4 key购买 nike

我有一个页面,用户可以在其中针对产品“提出问题”。

路线是:

context.MapRoute(
"Q&A - Ask - by Product",
"{someProductUri}/questions/ask",
new { controller = "Questions", action = "Ask" }
);

哪些匹配:

/car/questions/ask

/phone/questions/ask

这是 Action :

public class QuestionsController : Controller
{
public ViewResult Ask(string someProductUri)
{
// ...
}
}

现在,问题是,我还需要允许用户在页面本身上选择产品,例如,没有在 URI 中预先选择的产品。

因为这个 Controller 在一个区域,这个“默认URL”会是这样的:

/myarea/questions/ask

所以发生的事情是,当我开始行动时,“someProductUri”被设置为“myarea”,导致各种悲伤。

我想对两组 URL 重复使用相同的操作/ View ,但我不希望在默认 URL 时将路由值设置为“myarea”。

希望这是有道理的 - 有什么想法吗?

我需要单独的路线吗?我可以添加一个路由约束,使“someProductUri”不能是“myarea”,使其与路由不匹配并回退到默认值吗?

最佳答案

我的路线已经太多了,所以我不想只为这种极端情况添加另一条路线。

所以我最终使用了路由约束:

public class NotEqualToAreaName : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
return String.Compare(values[parameterName].ToString(), route.DataTokens["area"].ToString(), true) != 0;
}
}

非常简单和通用 - 所以我可以在遇到这种类型的边缘情况时随时重新使用它。

关于c# - ASP.NET MVC 3 - 区域路由的边缘案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6770513/

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