MVC 路由属性无控制器
MVC route attribute no controller
我正在构建一个内部网,其中有以下家庭控制器:
[Route("{action=index}")]
public class HomeController : Controller
{
public ActionResult Index()
{
return View(HomeModelBuilder.BuildHomeModel());
}
public ActionResult FormsHome()
{
return View(HomeModelBuilder.BuildFormsHomeModel());
}
}
我正在尝试让我的表单主页具有 http://intranet/forms
的 url,所以我想我可以使用以下路由属性来做到这一点:
[Route("~/forms")] // have also tried 'forms' and '/forms'
public ActionResult FormsHome()
但是当我去 url 时,它抱怨说有多个控制器有这条路线:
The request has found the following matching controller types:
HRWebForms.Website.Controllers.ChangeDetailsController
HRWebForms.Website.Controllers.InternalTransferController
HRWebForms.Website.Controllers.LeaverController
...
我也试过将 [RoutePrefix("")]
添加到控制器,但这也不起作用
有没有办法通过仅使用路由属性来为该操作提供 url 的 "forms"(没有任何控制器或没有添加带有索引的单独表单控制器)?
您可以尝试将 [RoutePrefix("forms")] 添加到您的控制器,但这会导致您的所有操作都需要相同的前缀。
对此也有一个解决方法(通过使用 [Route("~/RouteParam/AnotherRouteParam")] 来获得 Route "RouteParam/AnotherRouteParam"),但在我看来,FormsController 的工作成本会更低。
好的,ranquild 的评论将我推向了正确的方向。在我的路由配置中,我有默认路由
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
这样我的主页仍然可以在 url 上运行,但什么也没有。如果我将其更改为
// Needed for homepage
routes.MapRoute(
name: "Home",
url: "",
defaults: new { controller = "Home", action = "Index" }
);
// Needed for Html.ActionLink to work
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = UrlParameter.Optional, action = UrlParameter.Optional }
);
好像解决了问题
我正在构建一个内部网,其中有以下家庭控制器:
[Route("{action=index}")]
public class HomeController : Controller
{
public ActionResult Index()
{
return View(HomeModelBuilder.BuildHomeModel());
}
public ActionResult FormsHome()
{
return View(HomeModelBuilder.BuildFormsHomeModel());
}
}
我正在尝试让我的表单主页具有 http://intranet/forms
的 url,所以我想我可以使用以下路由属性来做到这一点:
[Route("~/forms")] // have also tried 'forms' and '/forms'
public ActionResult FormsHome()
但是当我去 url 时,它抱怨说有多个控制器有这条路线:
The request has found the following matching controller types: HRWebForms.Website.Controllers.ChangeDetailsController HRWebForms.Website.Controllers.InternalTransferController HRWebForms.Website.Controllers.LeaverController ...
我也试过将 [RoutePrefix("")]
添加到控制器,但这也不起作用
有没有办法通过仅使用路由属性来为该操作提供 url 的 "forms"(没有任何控制器或没有添加带有索引的单独表单控制器)?
您可以尝试将 [RoutePrefix("forms")] 添加到您的控制器,但这会导致您的所有操作都需要相同的前缀。
对此也有一个解决方法(通过使用 [Route("~/RouteParam/AnotherRouteParam")] 来获得 Route "RouteParam/AnotherRouteParam"),但在我看来,FormsController 的工作成本会更低。
好的,ranquild 的评论将我推向了正确的方向。在我的路由配置中,我有默认路由
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
这样我的主页仍然可以在 url 上运行,但什么也没有。如果我将其更改为
// Needed for homepage
routes.MapRoute(
name: "Home",
url: "",
defaults: new { controller = "Home", action = "Index" }
);
// Needed for Html.ActionLink to work
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = UrlParameter.Optional, action = UrlParameter.Optional }
);
好像解决了问题