asp.net 动作方法的 mvc 4 自定义 url
asp.net mvc 4 custom urls for action method
我正在创建一个 asp.net mvc 4 应用程序
public class AspNetController : Controller
{
//
// GET: /AspNet/
public ActionResult Index()
{
return View();
}
public ActionResult Introduction()
{
return View();
}
}
如上图有AspNet Controller和介绍Action Method
介绍操作方法的默认 Url 是
localhost:55134/aspnet/introduction
但我想要Url喜欢
localhost:55134/aspnet/introduction-To-AspNet
同为
/localhost:55134/aspnet/NetFrameWork 到
/localhost:55134/aspnet/What-is-.Net-Framework
怎么做
从技术上讲,这个概念属于ASP.NET MVC 中的路由。
为此,您需要在 RegisterRoutes(RouteCollection routes)
下的 App_Start->RouteConfig.cs
文件中为路由做一个条目
例如:
routes.MapRoute(
"customRouteName",
"aspnet/introduction-To-AspNet",
new { controller = "AspNet", action = "Introduction" });
此处 aspnet/introduction-To-AspNet 将追加到您的基础 url 之后,即 localhost:55134/
快速而肮脏的答案是向您的 ~/AppStart/RouteConfig.cs 文件添加一个路由,它将被处理:
routes.MapRoute(
name: "CustomRoute",
url: "Aspnet/Introduction-To-AspNet",
defaults: new { controller = "Home", action = "AspNet", id = UrlParameter.Optional }
);
但是,我假设这是针对某种类型的博客?我建议您有一个名为 view 的操作方法,然后使用您的姓名作为文章的参数。这样,您就不必在每次添加新文章或其他内容时都进入并编辑代码:
public class ArticlesController : Controller
{
public ActionResult ViewArticle(string? title)
{
ViewBag.Article = title;
return View();
}
}
这样,您的 URL 将是 www.yoursite.com/Articles/ViewArticle/Introduction-To-AspNet。通常,如果可以避免的话,您不想在路由配置中添加大量特定路由。话虽这么说,如果这是遗留系统,路由 table 可能是唯一的方法。
编辑
好的,所以你可以做的是将字符串传递到 ViewBag
并使用 case 语句来确定要显示哪个局部视图(我认为这可能是你理想的解决方案):
<!--cshtml view-->
@switch(ViewBag.Article)
{
case 'Introduction-To-AspNet':
@Html.Partial('pathToPartialView.cshtml')
break;
case 'Some-Other-Article'
@Html.Partial('pathToAnotherPartialView.cshtml')
break;
...
...
default:
@Html.Partial('invalidArticleName.cshtml')
break;
}
控制器将通过 ViewBag
传递文章名称,然后您可以使用 case 语句来确定要呈现的文章...当然,还有您一直在寻找的真正秘诀for: @Html.Partial('URL')
- 如果你把它放在页面中,这将把你的部分呈现出来。您也可以将对象作为 FYI 传递给它。
此外,请确保您对 switch 语句有默认操作,该操作将显示某种 404 页面,指示 URL 中的名称无效。你总是希望在你从 URL 获取用户输入的任何时候都有这个,因为人们一直在玩弄 URL(更天真地,一直复制粘贴它们 wrong/incompletely )
您应该能够使用 ActionName 属性来装饰您的路线。
[ActionName("Introduction-To-AspNet")]
public ActionResult Introduction()
{
return View();
}
您真的想使用 AttributeRouting,可以通过第三方包或本地使用。
我正在创建一个 asp.net mvc 4 应用程序
public class AspNetController : Controller
{
//
// GET: /AspNet/
public ActionResult Index()
{
return View();
}
public ActionResult Introduction()
{
return View();
}
}
如上图有AspNet Controller和介绍Action Method
介绍操作方法的默认 Url 是
localhost:55134/aspnet/introduction
但我想要Url喜欢
localhost:55134/aspnet/introduction-To-AspNet
同为 /localhost:55134/aspnet/NetFrameWork 到
/localhost:55134/aspnet/What-is-.Net-Framework
怎么做
从技术上讲,这个概念属于ASP.NET MVC 中的路由。
为此,您需要在 RegisterRoutes(RouteCollection routes)
App_Start->RouteConfig.cs
文件中为路由做一个条目
例如:
routes.MapRoute(
"customRouteName",
"aspnet/introduction-To-AspNet",
new { controller = "AspNet", action = "Introduction" });
此处 aspnet/introduction-To-AspNet 将追加到您的基础 url 之后,即 localhost:55134/
快速而肮脏的答案是向您的 ~/AppStart/RouteConfig.cs 文件添加一个路由,它将被处理:
routes.MapRoute(
name: "CustomRoute",
url: "Aspnet/Introduction-To-AspNet",
defaults: new { controller = "Home", action = "AspNet", id = UrlParameter.Optional }
);
但是,我假设这是针对某种类型的博客?我建议您有一个名为 view 的操作方法,然后使用您的姓名作为文章的参数。这样,您就不必在每次添加新文章或其他内容时都进入并编辑代码:
public class ArticlesController : Controller
{
public ActionResult ViewArticle(string? title)
{
ViewBag.Article = title;
return View();
}
}
这样,您的 URL 将是 www.yoursite.com/Articles/ViewArticle/Introduction-To-AspNet。通常,如果可以避免的话,您不想在路由配置中添加大量特定路由。话虽这么说,如果这是遗留系统,路由 table 可能是唯一的方法。
编辑
好的,所以你可以做的是将字符串传递到 ViewBag
并使用 case 语句来确定要显示哪个局部视图(我认为这可能是你理想的解决方案):
<!--cshtml view-->
@switch(ViewBag.Article)
{
case 'Introduction-To-AspNet':
@Html.Partial('pathToPartialView.cshtml')
break;
case 'Some-Other-Article'
@Html.Partial('pathToAnotherPartialView.cshtml')
break;
...
...
default:
@Html.Partial('invalidArticleName.cshtml')
break;
}
控制器将通过 ViewBag
传递文章名称,然后您可以使用 case 语句来确定要呈现的文章...当然,还有您一直在寻找的真正秘诀for: @Html.Partial('URL')
- 如果你把它放在页面中,这将把你的部分呈现出来。您也可以将对象作为 FYI 传递给它。
此外,请确保您对 switch 语句有默认操作,该操作将显示某种 404 页面,指示 URL 中的名称无效。你总是希望在你从 URL 获取用户输入的任何时候都有这个,因为人们一直在玩弄 URL(更天真地,一直复制粘贴它们 wrong/incompletely )
您应该能够使用 ActionName 属性来装饰您的路线。
[ActionName("Introduction-To-AspNet")]
public ActionResult Introduction()
{
return View();
}
您真的想使用 AttributeRouting,可以通过第三方包或本地使用。